Pessoal,
obrigado pela ajuda.
Resolvi o meu problema. O problema era uns tabs que tinha no inicio de cada
linha, e eu estava tratando isto como espaço.
Apenas para registro, o código ficou assim:
use strict;
use warnings;
my $var1;
my $var3;
my $linha;
my $var2;
open(my $file, '<', 'texto.txt');
foreach $linha (<$file>) {
chomp($linha);
($var1,$var2,$var3) = split(/[\/\s+]/,$linha,3);
print "Var1 $var1 var2 $var2 var3: $var3\n";
}
2013/3/18 breno
> (nossa, achei que só eu não dormia por aqui :D)
>
>
> Areal, não estou conseguindo reproduzir o seu problema:
>
> ---8<---
> use strict;
> use warnings;
>
> while (my $linha = ) {
> chomp $linha;
> my (@vars) = split '/|\s' => $linha, 3;
> use DDP; p @vars;
> }
>
> __DATA__
> 25/Bla Primeira Entrada
> 2/Tal Segunda Entrada de Texto
> --->8---
>
> Ao executar isso, os dados parecem bem separados e sem a quebra de
> linha no final:
>
> [
> [0] 25,
> [1] "Bla",
> [2] "Primeira Entrada"
> ]
> [
> [0] 2,
> [1] "Tal",
> [2] "Segunda Entrada de Texto"
> ]
>
> Dito isso, também gosto da solução do Ole de fazer o match completo e
> agrupar os valores. Se estiver usando um Perl 5 versão 10.0 ou
> superior, pode até mesmo agrupar com nomes, por exemplo: (?\w+)
> coloca o dado em $+{foo}. É mais fácil do que $1, $2, $3, ... :-)
>
> []s
>
> -b
>
> 2013/3/18 Guilherme Alves :
> > Opa,
> >
> > esqueci de falar.. achei alguma parada na net para colocar isto logo
> depois.
> >
> > $var3=$var3.$/;
> >
> >
> > e por isto funcionou com o + antes do ]
> >
> >
> > abs
> >
> > 2013/3/18 Ole Peter Smith
> >>
> >> o +antes de ] duvidoo.
> >>
> >> 0le
> >>
> >>
> >> 2013/3/18 Guilherme Alves
> >>>
> >>> Só para registrar.
> >>> Fiz isto:
> >>>
> >>> ($var1,$var2,$var3) = split(/[\/\s+]/,$linha,3);
> >>>
> >>>
> >>> Estou conseguindo pegar separando direitinho, porém a $var3 está
> pegando
> >>> uma quebra de linha.
> >>> Já tentei dar até 2 vezes o chomp($linha) antes do split.
> >>> Alguém sabe me dizer o pq disto estar acontecendo?
> >>>
> >>>
> >>> Obrigado!
> >>>
> >>>
> >>> 2013/3/18 Guilherme Alves
>
> Opa,
>
> eu fiz primeiro desta forma, pegando o primeiro espaço e depois
> separando o que tem o /
> Posso sim garantir que terá apenas uma barra.
> Depois mudei para separar primeiro pelo / e depois pelo espaço pois
> estava dando um problema estranho com a quebra de linha.
>
> Enfim. Resolvi o problema. Só que eu gostaria de aprender a fazer isto
> de uma maneira mais simples, onde eu passaria as 3 variáveis de uma
> só vez.
>
> Desta forma eu poderia adaptar fácil para outros casos.. onde por
> exemplo:
> Primeira entrada - 25/Bla
> Segunda Entrada de Texto - 2/Tal
>
>
> Abs
>
>
> 2013/3/18 Ole Peter Smith
> >
> > eu fazia o split(/\s+/,..) primeiro e depois o split(/[\\\/]/,...)
> > depois (ou melhor ainda: if (=~/[\\\/]/...).
> >
> > 0le
> >
> >
> > 2013/3/18 Ole Peter Smith
> >>
> >> somente se vc pode garantir que nao ha mais '/' nos strings... caso
> >> sim, tera que tratar isso.
> >>
> >> 0le
> >>
> >>
> >> 2013/3/18 Guilherme Alves
> >>>
> >>> Caros Monges,
> >>>
> >>> venho aqui pedir ajuda de vocês para solucionar o meu problema.
> >>>
> >>> Tenho o seguinte arquivo de texto:
> >>> --DATA
> >>> 25/Bla Primeira Entrada
> >>> 2/Tal Segunda Entrada de Texto
> >>> --DATA
> >>>
> >>> Gostaria de fazer com que o texto fique com:
> >>>
> >>> $var1=25
> >>> $var2=Bla
> >>> $var3=Primeira Entrada
> >>>
> >>> e
> >>>
> >>> $var1=2
> >>> $var2=Tal
> >>> $var3=Segunda Entrada de Texto
> >>>
> >>> Para isto fiz um loop para o tratamento de cada linha. No momento
> uso
> >>> 2 splits (um para o "/"e outro para o primeiro espaço em branco)
> >>>
> >>> ($var1,$lixo) = split("/",$linha);
> >>> ($var2,$var3) = split(/\s+/,$lixo,2);
> >>>
> >>> Isto funciona porém o $var3 está ficando estranho, possuindo
> quebras
> >>> de linhas e tal.
> >>>
> >>> Gostaria de saber se existe alguma maneira de eu fazer este split
> >>> todo de uma só vez, tipo:
> >>> ($var1,$var2,$var3) = split("/\s+",$linha,3);
> >>>
> >>>
> >>> Obrigado pela ajuda..
> >>>
> >>>
> >>>
> >>> --
> >>> Guilherme Alves
> >>>
> >>> Redes, Sites e Sistemas(RSS) - GRIS-DCC-UFRJ
> >>> Grupo de Resposta a Incidentes de Segurança
> >>> Conheça o GRIS em www.gris.dcc.ufrj.br
> >>>
> >>> ___
> >>> Rio-pm mailing list
> >>> Rio-pm@pm.org
> >>> http://mail.pm.org/mailman/listinfo/rio-pm
> >>
> >>
> >>
> >>
> >> --
> >> /
> >>