[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