[Rio-pm] Ajuda com split

Guilherme Alves guilhermeareal+riopm em gmail.com
Segunda Março 18 10:39:47 PDT 2013


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 <breno em rio.pm.org>

> (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 = <DATA>) {
>   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: (?<foo>\w+)
> coloca o dado em $+{foo}. É mais fácil do que $1, $2, $3, ... :-)
>
> []s
>
> -b
>
> 2013/3/18 Guilherme Alves <guilhermeareal+riopm em gmail.com>:
> > 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 <ole.ufg em gmail.com>
> >>
> >> o +antes de ] duvidoo.
> >>
> >> 0le
> >>
> >>
> >> 2013/3/18 Guilherme Alves <guilhermeareal+riopm em gmail.com>
> >>>
> >>> 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 <guilhermeareal+riopm em gmail.com>
> >>>>
> >>>> 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 <ole.ufg em gmail.com>
> >>>>>
> >>>>> eu fazia o split(/\s+/,..) primeiro e depois o split(/[\\\/]/,...)
> >>>>> depois (ou melhor ainda: if (=~/[\\\/]/...).
> >>>>>
> >>>>> 0le
> >>>>>
> >>>>>
> >>>>> 2013/3/18 Ole Peter Smith <ole.ufg em gmail.com>
> >>>>>>
> >>>>>> somente se vc pode garantir que nao ha mais '/' nos strings... caso
> >>>>>> sim, tera que tratar isso.
> >>>>>>
> >>>>>> 0le
> >>>>>>
> >>>>>>
> >>>>>> 2013/3/18 Guilherme Alves <guilhermeareal+riopm em gmail.com>
> >>>>>>>
> >>>>>>> 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 em pm.org
> >>>>>>> http://mail.pm.org/mailman/listinfo/rio-pm
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>>                                             /////
> >>>>>>                                          ( O O )
> >>>>>> =================oOO==(_)==OOo=================
> >>>>>>             Every day and every hour, I'm Learning more
> >>>>>>           The more I Learn, the less I Know about before
> >>>>>>          The Less I know, the more I want to Look around
> >>>>>>              Diggin' deeper into Higher Ground...  UB40
> >>>>>>                                    .oooO Oooo.
> >>>>>> ==================(     )=(     )=====================
> >>>>>>                                      \  (     )  /
> >>>>>>                                       \_)   (_/
> >>>>>> ===============================================
> >>>>>>                         Ole Peter Smith, IME, UFG
> >>>>>>             http://olepeter.mat.ufg.br  - ole at mat.ufg.br
> >>>>>> ===============================================
> >>>>>>                    Life sure is a Mystery to be Lived
> >>>>>>                       Not a Problem to be Solved
> >>>>>> ===============================================
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>>                                             /////
> >>>>>                                          ( O O )
> >>>>> =================oOO==(_)==OOo=================
> >>>>>             Every day and every hour, I'm Learning more
> >>>>>           The more I Learn, the less I Know about before
> >>>>>          The Less I know, the more I want to Look around
> >>>>>              Diggin' deeper into Higher Ground...  UB40
> >>>>>                                    .oooO Oooo.
> >>>>> ==================(     )=(     )=====================
> >>>>>                                      \  (     )  /
> >>>>>                                       \_)   (_/
> >>>>> ===============================================
> >>>>>                         Ole Peter Smith, IME, UFG
> >>>>>             http://olepeter.mat.ufg.br  - ole at mat.ufg.br
> >>>>> ===============================================
> >>>>>                    Life sure is a Mystery to be Lived
> >>>>>                       Not a Problem to be Solved
> >>>>> ===============================================
> >>>>>
> >>>>> _______________________________________________
> >>>>> Rio-pm mailing list
> >>>>> Rio-pm em pm.org
> >>>>> http://mail.pm.org/mailman/listinfo/rio-pm
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> 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
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> 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 em pm.org
> >>> http://mail.pm.org/mailman/listinfo/rio-pm
> >>
> >>
> >>
> >>
> >> --
> >>                                             /////
> >>                                          ( O O )
> >> =================oOO==(_)==OOo=================
> >>             Every day and every hour, I'm Learning more
> >>           The more I Learn, the less I Know about before
> >>          The Less I know, the more I want to Look around
> >>              Diggin' deeper into Higher Ground...  UB40
> >>                                    .oooO Oooo.
> >> ==================(     )=(     )=====================
> >>                                      \  (     )  /
> >>                                       \_)   (_/
> >> ===============================================
> >>                         Ole Peter Smith, IME, UFG
> >>             http://olepeter.mat.ufg.br  - ole at mat.ufg.br
> >> ===============================================
> >>                    Life sure is a Mystery to be Lived
> >>                       Not a Problem to be Solved
> >> ===============================================
> >>
> >> _______________________________________________
> >> Rio-pm mailing list
> >> Rio-pm em pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm
> >
> >
> >
> >
> > --
> > 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 em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20130318/298ba52e/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm