<br><br><div class="gmail_quote">2008/12/22 Wagner Arbex <span dir="ltr"><<a href="mailto:arbex@arbex.pro.br">arbex@arbex.pro.br</a>></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 ABC X Y CDA 40<br>
5 XYZ - U BBB 0<br>
8 --- 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> </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><arquivo_fictício><br>campo1 campo2<br></arquivo_fictício><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><code><br><br><br>use strict;<br>open my $fh,'<','caminho_para/meuarquivo.txt' or die $!; #Apenas didático. Não se deve tratar esse tipo de erro com die.<br>
while(<$fh>){<br> 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> chomp $linha; #Remove o terminador do final da string(se houver)<br><br> 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 '+'), seja separado em uma lista. No caso, a minha lista compreende o agrupamento(os parênteses) das variáveis $campo1 e $campo2.<br>
<br> print "\n\nCAMPO1: $campo1\nCAMPO2: $campo2";#imprime o resultado.<br>}<br>close $fh;<br><br>__END__;<br></code><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 ( <ARQ1> ) {<br>
chomp;<br>
<br>
my $primeiro = $_;<br>
</blockquote><div><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> $primeiro =~ s/\s.*//; # 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>
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 '$_'.<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>
$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 '$ultimo', 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: s/\ +$//; ou s/\s+$//; <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>
print ARQ2 "$primeiro,$ultimo\n";<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> <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>
Wagner Arbex<br>
Doutorando em Engenharia de Sistemas e Computacao - COPPE/UFRJ<br>
<br>
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>