[Rio-pm] Problema com formatos

breno breno em rio.pm.org
Domingo Janeiro 27 22:44:27 PST 2013


Leo, acho que vc está se referindo a:

perl -lne "..." arquivo.txt

=)

Sim sim, isso certamente ajudaria no processo, mas acho que a dúvida
do Aureliano está um pouco antes ainda, em como fazer o perl
decodificar o conteúdo do texto em chinês. Aliás, uma curiosidade:
esse tipo de oneliner para renomear arquivos baseados em regex (tá,
não exatamente esse tipo pq não envolve ler conteúdo, mas a idéia é a
mesma) ficou tão popular que gerou um programa à parte, o "rename" da
linha de comando:

   rename 's/regex_no_nome_antigo/valor_novo/' foo*

[]s

-b

2013/1/28 Leo Balter <leonardo.balter em gmail.com>:
> Sou novato em Perl mas o Garu e o Blabos me mostraram um esquema bacana do
> perl de rodar um mesmo comando para cada linha do arquivo.
>
> Acho que substituiria seu while e ficaria interessante usar isso combinando
> com regex.
>
> Nao lembro o esquema, mas da pra pesquisar por algo enquanto outra pessoa
> nao responde.
>
> Leo Balter - via mobile
>
> Em 27/01/2013, às 22:35, Aureliano Guedes <guedes_1000 em hotmail.com>
> escreveu:
>
> Ola monges,
>
> Estou com uma pasta cheia de arquivos *.psd e um txt usado para modificar o
> nome dos arquivos.
>
> O txt esta da seguinte forma:
> 001#nome_do_arquivo_001
> 002#nome_do_arquivo_002
> 003#nome_do_arquivo_003
> ....
>
> E os arquivos nomeados da seguinte forma:
> nome_do_arquivo_001.psd
> nome_do_arquivo_002.psd
> nome_do_arquivo_003.psd
> ...
>
> O objetivo era renomear os arquivos com base no txt, onde o
> "nome_do_arquivo" fosse substituido pelo numero antes do #.
> Algo como :
> #!/usr/bin/env perl
>
> use common::sense;
> use autodie;
>
> my @list = <*>;
> @list = glob("*.psd");
>
> open my $in, "<", "nome_do_arquivo.txt";
>
> while (my $line = <$in>){
>     $line = ~/(.+)#´(.+)/;
>     my $s1 = $1;
>     my $s2 = $2;
>
>     foreach my $i (@list){
>         if ($i =~ /.*´$s2/){
>             say "$_: $s2 -> $s1\n";
>             rename $_, $s1;
>         }
>     }
> }
>
> Ou algo parecido.
>
> O problema é que que o txt esta gb18030 (Chinês Tradicional) e o Perl
> trabalhando com o charset padrão os bytes são passados sem modificação
> nenhuma.
> O sistema consegue converter o nome dos arquivos *.psd e o conteudo do txt
> para iso-8859-1. Dessa forma a leitura fica assim:
>
> 501#°ËÀº»ÔÅ׾Ȱæ#
>
> Em contrapartida se convertido diretamente para utf8 ficaria:
>
> 501#八篮辉抛救版#
>
> Mas eu creio que o Perl não esteja interpretando o texto original como
> gb18030 e sim como outro formato e tentando converter para utf8.
>
> Portanto não da certo tentar renomear nem mesmo tentar ler o arquivo txt.
>
> Alguem tem alguma sugestão de como resolver este problema???
>
> Desde já grato.
>
> Att,
> Aureliano Guedes
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm


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