[Rio-pm] Ajuda com split

breno breno em rio.pm.org
Segunda Março 18 00:55:55 PDT 2013


(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


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