[SP-pm] ER para separar o primeiro e o último campo de um registro.
Nelson Ferraz
nferraz at gmail.com
Mon Dec 22 11:32:33 PST 2008
2008/12/22 Wagner Arbex <arbex em arbex.pro.br>:
> O que eu preciso é ler esse arquivo e separar o primeiro e o último
> campo para gravá-los em outro arquivo, seria +-
>
> while ( <ARQ1> ) {
> chomp;
>
> my $primeiro = $_;
> $primeiro =~ s/\s.*//; # OK... esse funciona.
>
> my $ultimo = $_;
> $ultimo =~ s/.*\s.+$//; # Bom, aqui eu não sei qual a ER a ser usada.
>
> print ARQ2 "$primeiro,$ultimo\n";
> }
>
> Além de me ajudarem com a ER, todas as sugestões para eu melhorar o
> código, conhecer novas estruturas, formas de fazer etc são muito bem vindas.
Parece que você mesmo encontrou a solução para o problema, no segundo
email. Parabéns!
Gostaria apenas de sugerir uma modificação para tornar o seu programa
mais genérico:
while ( $line = <> ) {
my ($f1, $f2) = $line =~ /^ (\d+) .*? (\d+) $/x;
print "$1,$2\n";
}
Observe que, ao invés de abrir dois filehandles (ARQ1 e ARQ2), eu
preferi usar o operador diamante ( <> ), que permite que o seu arquivo
de entrada possa ser aberto assim:
programa.pl arquivo-entrada.txt
Isso vai imprimir a saída na tela. Mas você pode redirecionar a saída
para um arquivo:
programa.pl arquivo-entrada.txt > arquivo-saida.txt
A vantagem é que, com isso, seu programa funciona como um filtro. Você
pode encadeá-lo com outros programas, como por exemplo:
programa.pl arquivo-entrada.txt | sort | uniq > arquivo-saida.txt
Ou:
find . -name '*.txt' | programa.pl | sort | uniq > arquivo-saida.txt
Esta é a filosofia Unix: escreva programas pequenos, que façam apenas
uma coisa bem, e o façam bem.
More information about the SaoPaulo-pm
mailing list