[SP-pm] ER para separar o primeiro e o último campo de um registro.
Wagner Arbex
arbex at arbex.pro.br
Mon Dec 22 12:04:39 PST 2008
Prezados... antes de tudo, agradeço a todos, pois as soluções propostas
foram uma verdadeira aula e todas as soluções resolviam o meu prob - até
a que eu mesmo sugeri, no segundo email :) basta eu achar a melhor.
Qto as indicações de leitura, mais uma vez, obrigado... já estavam no
meu "bookmark de cabeceira" e eu tenho consultado diariamente.
[]s e obrigado.
On 12/22/2008 04:01 PM, Andre Carneiro wrote:
>
>
> 2008/12/22 Wagner Arbex <arbex at arbex.pro.br <mailto:arbex at arbex.pro.br>>
>
> Prezados Monges... estou com um pequeno prob com ERs e tenho certeza de
> que é trivial, mas agarrei.
>
> Vou dar um exemplo simplificado. Tenho um arquivo com vários registro
> que pode ser, por ex:
>
> 1 ABC X Y CDA 40
> 5 XYZ - U BBB 0
> 8 --- T C CTT 80
>
> E gostaria de gravar um arquivo com:
>
> 1,40
> 5,0
> 8,80
>
>
> Não entendi o objetivo aqui. Se puder ser mais claro seria bom.
>
>
>
> O que eu preciso é ler esse arquivo e separar o primeiro e o último
> campo para gravá-los em outro arquivo, seria +-
>
>
> 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.
>
> 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:
>
> <arquivo_fictício>
> campo1 campo2
> </arquivo_fictício>
>
> 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:
>
> <code>
>
>
> use strict;
> open my $fh,'<','caminho_para/meuarquivo.txt' or die $!; #Apenas
> didático. Não se deve tratar esse tipo de erro com die.
> while(<$fh>){
> 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.
>
> chomp $linha; #Remove o terminador do final da string(se houver)
>
> 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.
>
> print "\n\nCAMPO1: $campo1\nCAMPO2: $campo2";#imprime o resultado.
> }
> close $fh;
>
> __END__;
> </code>
>
>
> 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.
>
>
>
> while ( <ARQ1> ) {
> chomp;
>
> my $primeiro = $_;
>
>
>
>
> $primeiro =~ s/\s.*//; # OK... esse funciona.
>
>
> my $ultimo = $_;
>
>
> 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 '$_'.
>
>
>
> $ultimo =~ s/.*\s.+$//; # Bom, aqui eu não sei qual a ER a ser usada.
>
>
> 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+$//;
>
>
>
> 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.
>
>
> E eu recomendo que você comece lendo isso aqui:
> http://perl.org.br/Perldoc/V500807/Perlintro
>
>
>
>
> Qualquer dúvida poste aqui.
>
>
> Cheers!
>
>
> []s e, desde já, obrigado.
> --
> Wagner Arbex
> Doutorando em Engenharia de Sistemas e Computacao - COPPE/UFRJ
>
> Vendo notebook - http://www.arbex.pro.br/
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org <mailto:SaoPaulo-pm at pm.org>
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
--
Wagner Arbex
Doutorando em Engenharia de Sistemas e Computacao - COPPE/UFRJ
Vendo notebook - http://www.arbex.pro.br/
More information about the SaoPaulo-pm
mailing list