<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>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. </div><div><br></div><div>Acho que substituiria seu while e ficaria interessante usar isso combinando com regex. </div><div><br></div><div>Nao lembro o esquema, mas da pra pesquisar por algo enquanto outra pessoa nao responde.</div><div><br>Leo Balter - via mobile</div><div><br>Em 27/01/2013, às 22:35, Aureliano Guedes <<a href="mailto:guedes_1000@hotmail.com">guedes_1000@hotmail.com</a>> escreveu:<br><br></div><blockquote type="cite"><div>

<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
<div dir="ltr">
Ola monges,<br><br>Estou com uma pasta cheia de arquivos *.psd e um txt usado para modificar o nome dos arquivos.<br><br>O txt esta da seguinte forma:<br>001#nome_do_arquivo_001<br>002#nome_do_arquivo_002<br>003#nome_do_arquivo_003<br>....<br><br>E os arquivos nomeados da seguinte forma:<br>nome_do_arquivo_001.psd<br>nome_do_arquivo_002.psd<br>nome_do_arquivo_003.psd<br>...<br><br>O objetivo era renomear os arquivos com base no txt, onde o "nome_do_arquivo" fosse substituido pelo numero antes do #.<br>Algo como :<br><code><code><span style="color: #000000"><span style="color: #FF8000">#!/usr/bin/env perl<br><br></span><span style="color: #007700">use </span><span style="color: #0000BB">common</span><span style="color: #007700">::</span><span style="color: #0000BB">sense</span><span style="color: #007700">;<br>use </span><span style="color: #0000BB">autodie</span><span style="color: #007700">;<br><br></span><span style="color: #0000BB">my </span><span style="color: #007700">@list = <*>;<br>@list = </span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #DD0000">"*.psd"</span><span style="color: #007700">);</span><span style="color: #007700"><br><br></span><span style="color: #0000BB">open my $in</span><span style="color: #007700">, </span><span style="color: #DD0000">"<"</span><span style="color: #007700">, </span><span style="color: #DD0000">"nome_do_arquivo.txt"</span><span style="color: #007700">;<br><br>while (</span><span style="color: #0000BB">my $line </span><span style="color: #007700">= <</span><span style="color: #0000BB">$in</span><span style="color: #007700">>){<br>    </span><span style="color: #0000BB">$line </span><span style="color: #007700">= ~/(.+)</span><span style="color: #FF8000">#´(.+)/;<br>    </span><span style="color: #0000BB">my $s1 </span><span style="color: #007700">= $</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br>    </span><span style="color: #0000BB">my $s2 </span><span style="color: #007700">= $</span><span style="color: #0000BB">2</span><span style="color: #007700">;<br>    <br>    foreach </span><span style="color: #0000BB">my $i </span><span style="color: #007700">(@list){<br>        if (</span><span style="color: #0000BB">$i </span><span style="color: #007700">=~ /.*</span><span style="color: #0000BB">´$s2</span><span style="color: #007700">/){<br>            </span><span style="color: #0000BB">say </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$_</span><span style="color: #DD0000">: </span><span style="color: #0000BB">$s2</span><span style="color: #DD0000"> -> </span><span style="color: #0000BB">$s1</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br>            </span><span style="color: #0000BB">rename $_</span><span style="color: #007700">, </span><span style="color: #0000BB">$s1</span><span style="color: #007700">;<br>        }<br>    }<br>}</span></span></code></code><br><br>Ou algo parecido.<br><br>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.<br>O sistema consegue converter o nome dos arquivos *.psd e o conteudo do txt para iso-8859-1. Dessa forma a leitura fica assim:<br><pre class="bbcode_code" style="height:36px;">501#°ËÀº»ÔÅ׾Ȱæ#</pre>Em contrapartida se convertido diretamente para utf8 ficaria:<br><pre class="bbcode_code" style="height:36px;">501#八篮辉抛救版#</pre>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.<br><br>Portanto não da certo tentar renomear nem mesmo tentar ler o arquivo txt.<br><br>Alguem tem alguma sugestão de como resolver este problema???<br><br>Desde já grato.<br><br>Att,<br>Aureliano Guedes<br><br>                                     </div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Rio-pm mailing list</span><br><span><a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a></span><br><span><a href="http://mail.pm.org/mailman/listinfo/rio-pm">http://mail.pm.org/mailman/listinfo/rio-pm</a></span></div></blockquote></body></html>