[SP-pm] Problema com encoding

Solli Honorio shonorio em gmail.com
Sexta Julho 13 05:54:00 PDT 2007


Henrique, seja bem vindo ao grupo e, sabe lá por Deus, os ogros de plantão
não fizeram alguns comentários sobre o teu código. Segue algumas alterações
que podem transformar todos os teus códigos mais legíveis para você e todos
demais.

No inicio pode parecer chato, mas depois o negócio vai naturalmente.

<code>
#!/usr/bin/perl -w
use strict;
use Pod::Usage;
use Getopt::Long qw (:config pass_through );
use encoding "latin1";

my %config;
my %dictionary = (
       'ç'   => "\\c{c}",
       'á'   => "\\'a",
       'í'   => "\\'{\\i}",
       'é'   => "\\'e",
       'ó'   => "\\'o",
       'ú'   => "\\'u",
       'ã'   => "\\~a",
       'õ'   => "\\~o",
       'â'   => "\\^a",
       'ê'   => "\\^e",
       'ô'   => "\\^o",
       'ü'   => '\\"u');

# Pega as opções de linha de comando e
# armazena no hash config.
GetOptions (
  'h|help!'      => \$config{help},
  'i|input=s'    => \$config{input},
  'o|output=s'   => \$config{output},
) or pod2usage(-verbose => 1) && exit;

# Imprime o help nestas condições
if ( (  defined $config{help} ) ||
     (! defined $config{input}) ||
     (! defined $config{output} ) ) {
    pod2usage( -verbose => 1 );
    exit 1;
};

=item do_something

Esta função abre os arquivos de input e output e faz o trabalho de
conversão.

=cut
do_something();

sub do_something {
    open INPUT,'<', $config{input} or
        die "Can't open file $config{input}. Error : $!";
    open OUTPUT,'>', $config{output} or
        die "Can't open file $config{output}. Error : $!";

    my $var;
    my $length     = 1024;
    # Eu nao compreendi pq vc esta utilizando o read
    # para ler este arquivo, ao invez de <INPUT>
    my $bytes_read = read( INPUT, $var ,$length );


    while ( $bytes_read > 0 ) {
        foreach my $key ( keys (%dictionary) ) {
            $var =~ s/$key/$dictionary{$key}/g;
        }

        print OUTPUT $var;
        $bytes_read = read(INPUT, $var, $length);
    }

    close INPUT;
    close OUTPUT;

=head1 NAME

transformer.pl - Script transforma algo em alguma cosia.

=head1 SYNOPSIS

transformer.pl -help
transformer.pl -input meuarquivo.txt -o seuarquivo.tex

bcktimestamp [opções]

=head1 OPTIONS

=over 8

=item B<-help>

Mostra uma mensagem de ajuda.

=item B<-input>

Informa o arquivo de entrada, o arquivo que será objeto do processamento.

=item B<-output>

Informa o arquivo de saída do processamento
=back

=head1 DESCRIPTION

B<Este programa> vai ler o arquivo informado na opção B<-input>, fará algum
processamento e gravará o resultado no arquivo informado na opção
B<-output>.

=cut

</code>

Teste este cara e nos fale o que vc acha ?

Abraços,

Solli M. Honório

On 7/11/07, Henrique Fleming <hfleming38 em gmail.com> wrote:
>
> O script abaixo pretende, em um texto escrito com encoding "latin1",
> transformar caracteres
> acentuados em suas versões mais "transportáveis" em Latex. Basicamente ele
> deveria ler um
> arquivo fornecido como argumento na linha de comando e gerar um arquivo "
> temp.tex" em que
> os caracteres acentuados foram substituídos pelas convenções Latex. Ele
> funciona perfeitamente
> se a primeira coluna do hash %dictionary contiver apenas ascii. Da forma
> que está, há a reclamação
> de "unrecognized character" já para o c-cedilha. Tentei colocar "use
> encoding 'latin1' ; " , mas não
> funciona igualmente.
>
> Alguém sabe como fazer isso?
>
> Grato,
>
> Henrique
>
>
> --------------------------------------------------------------------------------
> #!/usr/bin/perl
> #
> # Usar um Hash para dirigir um pattern replacement
> # Files are invoked at the command line
> #
> # use encoding "latin1";
> %dictionary = (
>        ç   => "\\c{c}",
>        á   => "\\'a",
>        í   => "\\'{\\i}",
>        é   => "\\'e",
>        ó   => "\\'o",
>        ú   => "\\'u",
>        ã   => "\\~a",
>        õ   => "\\~o",
>        â   => "\\^a",
>        ê   => "\\^e",
>        ô   => "\\^o",
>        ü   => '\\"u',
> );
> $input = $ARGV[0];
> open(INPUT,$input);
> open(OUTPUT,">temp.tex");
> $length = 1024;
> $bytes_read = read(INPUT, $var ,$length);
> while ($bytes_read > 0) {
>    foreach $key (keys (%dictionary)) {
>        $var =~ s/$key/$dictionary{$key}/g;
>        }
>        print OUTPUT $var;
>    $bytes_read= read(INPUT, $var, $length);
> }
> close(INPUT);
> close(OUTPUT);
>
> ---------------------------------------------------------------------------------------------------
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/saopaulo-pm/attachments/20070713/06646284/attachment-0001.html 


Mais detalhes sobre a lista de discussão SaoPaulo-pm