<br><br><div class="gmail_quote">2008/12/22 Wagner Arbex <span dir="ltr">&lt;<a href="mailto:arbex@arbex.pro.br">arbex@arbex.pro.br</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Prezados Monges... estou com um pequeno prob com ERs e tenho certeza de<br>
que é trivial, mas agarrei.<br>
<br>
Vou dar um exemplo simplificado. Tenho um arquivo com vários registro<br>
que pode ser, por ex:<br>
<br>
1 &nbsp; &nbsp; &nbsp; &nbsp; ABC X Y CDA 40<br>
5 &nbsp; &nbsp; &nbsp; &nbsp; XYZ - U BBB &nbsp;0<br>
8 &nbsp; &nbsp; &nbsp; &nbsp; --- T C CTT 80<br>
<br>
E gostaria de gravar um arquivo com:<br>
<br>
1,40<br>
5,0<br>
8,80<br>
</blockquote><div><br>Não entendi o objetivo aqui. Se puder ser mais claro seria bom.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
O que eu preciso é ler esse arquivo e separar o primeiro e o último<br>
campo para gravá-los em outro arquivo, seria +-</blockquote><br>Pois é, o texto em cima eu entendi, mas não entendi o seu exemplo... está meio estranho. O que você precisa separar dentro do arquivo exatamente. Dê um exemplo real, se possível.<br>
<br>Quanto a ER, você precisa identificar o que está separando o primeiro e o último caracter, por exemplo, suponha que a entrada seja algo assim:<br><br>&lt;arquivo_fictício&gt;<br>campo1 campo2<br>&lt;/arquivo_fictício&gt;<br>
<br>O que é separado aqui é o espaço. Se eu quiser usar expressões regulares para separar isso e guardar em duas variáveis, eu poderia fazer assim, por exemplo:<br><br>&lt;code&gt;<br><br><br>use strict;<br>open my $fh,&#39;&lt;&#39;,&#39;caminho_para/meuarquivo.txt&#39; or die $!; #Apenas didático. Não se deve tratar esse tipo de erro com die.<br>
while(&lt;$fh&gt;){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $linha = $_;#Evite trabalhar com $_ diretamente, a menos que você saiba exatamente o que você está fazendo. Toda a vez que o while iterar, $_ conterá uma nova linha do arquivo, então preste atenção para não sobrescrever valores em variáveis ou algo do tipo.<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chomp $linha; #Remove o terminador do final da string(se houver)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($campo1,$campo2) = split /\ +/,$linha;# split é uma função nativa de perl, que faz com que tudo o que está antes e depois do padrão(nesse caso, o padrão é um espaço ou &#39;+&#39;),&nbsp; seja separado em uma lista. No caso, a minha lista compreende o agrupamento(os parênteses) das variáveis $campo1 e $campo2.<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;\n\nCAMPO1: $campo1\nCAMPO2: $campo2&quot;;#imprime o resultado.<br>}<br>close $fh;<br><br>__END__;<br>&lt;/code&gt;<br><br><br>Existem várias outras formas de fazer, Se você não entendeu, ou se eu não entendi o seu problema, volte a postar por aqui.<br>
<br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
while ( &lt;ARQ1&gt; ) {<br>
 &nbsp; chomp;<br>
<br>
 &nbsp; my $primeiro = $_;<br>
 </blockquote><div><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&nbsp; $primeiro =~ s/\s.*//; &nbsp;# OK... esse funciona.<br>
</blockquote><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
 &nbsp; my $ultimo = $_;</blockquote><div><br>Cuidado com a confusão aqui. Você está atribuindo sempre o mesmo valor para $primeiro e $ultimo. É isso mesmo que você quer? Se não for, pense no que eu disse sobre trabalhar diretamente com &#39;$_&#39;.<br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
 &nbsp; $ultimo =~ s/.*\s.+$//; # Bom, aqui eu não sei qual a ER a ser usada.<br>
</blockquote><div><br>Eu também não, simplesmente porque não estou entendendo o que você quer na verdade. Essa ER aí em cima simplesmente vai anular qualquer valor que esteja em &#39;$ultimo&#39;, substituindo tudo, inclusive o último espaço no final da linha, por nada. Se você queria substituir todos os espaços por nada, poderia usar:&nbsp; s/\ +$//;&nbsp;&nbsp;&nbsp; ou&nbsp;&nbsp;&nbsp; s/\s+$//; <br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
 &nbsp; print ARQ2 &quot;$primeiro,$ultimo\n&quot;;<br>
}<br>
<br>
Além de me ajudarem com a ER, todas as sugestões para eu melhorar o<br>
código, conhecer novas estruturas, formas de fazer etc são muito bem vindas.<br>
</blockquote><div><br>E eu recomendo que você comece lendo isso aqui: <a href="http://perl.org.br/Perldoc/V500807/Perlintro">http://perl.org.br/Perldoc/V500807/Perlintro</a><br><br><br><br>&nbsp;<br>Qualquer dúvida poste aqui.<br>
<br><br>Cheers!<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
[]s e, desde já, obrigado.<br>
--<br>
 &nbsp; Wagner Arbex<br>
 &nbsp; Doutorando em Engenharia de Sistemas e Computacao - COPPE/UFRJ<br>
<br>
 &nbsp; Vendo notebook - <a href="http://www.arbex.pro.br/" target="_blank">http://www.arbex.pro.br/</a><br>
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br><br>