[Cascavel-pm] Split

Adriano Ferreira a.r.ferreira em gmail.com
Segunda Março 5 11:29:37 PST 2007


On 3/5/07, Patty Silva <ptfzs em yahoo.com.br> wrote:
> Tipow.. mas como irei fazer isso sendo que leio a linha e a linha  q possui
> os valores
> 12   2         2         2         2
> ??
> nao entendi..

O que deve ter causado sua confusão foi o uso do argumento implicito
do split pelo Eden:

    split( /\t/ )

é o mesmo que

    split /\t/, $_

(ou seja, opera na variável de tópico $_). De fato, esta expressão
fica errado quando você renomeou a linha lida para uma variável
explícita: quer dizer, seu código tem de ser mais ou menos

 while ( $linha=<$fh> )
    {


       my @teste = grep { $_ } split(/\t/, $linha);



    }

Para você entender os resultados dos comandos, você pode olhar o
resultado do split

$ perl -MData::Dumper -e '$_ = "12\t12\t23\t23\t\t25\t23", @list =
split /\t/,$_, 0; print Dumper(\@list)'
$VAR1 = [
          '12',
          '12',
          '23',
          '23',
          '',
          '25',
          '23'
        ];

e depois o efeito do grep

$ perl -MData::Dumper -e '$_ = "12\t12\t23\t23\t\t25\t23", @list =
grep {$_} split /\t/, $_, 0; print Dumper(\@list)'
$VAR1 = [
          '12',
          '12',
          '23',
          '23',
          '25',
          '23'
        ];

>
> Pode explicar ?)
> Obrigada
>
> []ss
>
> Adriano Ferreira <a.r.ferreira em gmail.com> escreveu:
>  On 3/5/07, Patty Silva wrote:
> > Eu fiz assim:
> > while ( $linha=<$fh> )
> > {
> >
> >
> > my @teste = grep {$linha} split(/\t/);
>
> Supondo (o que parece razoável) que sua $linha não está vazia, o bloco
> { $linha } vai retornar verdadeiro para todo e qualquer campo do
> retorno de split.
>
> Por isso que o Eden sugeriu testar { $_ } que vai iterando
> sucessivamente por cada um dos campos retornados.
>
> >
> >
> >
> > }
> >
> > Nao funcionou :(
> >
> > Eden Cardim escreveu:
>
> > On 3/5/07, Patty Silva wrote:
> > > Ola Pessoal
> > >
> > >
> > > Tem como eu fazer um split nao pegar campo vazio ex:
> > > 12 12 23 23 25 23
> > >
> > > split(/\t/)
> > > so que tem 2 elementos ali vazios.. tem como ele nao pegar esses
> > elementos?
> >
> > my @list = grep {$_} split(/\t/);
> >
> > --
> > Eden Cardim
> > Instituto Baiano de Biotecnologia
> > Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
> > Laboratório de Bioinformática
> > --
> > "you seem to think that 'close enough' is close enough...
> > please learn to be 'literal' around programming."
> > merlyn - on irc.freenode.net#perl
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> >
> >
> > __________________________________________________
> > Fale com seus amigos de graça com o novo Yahoo! Messenger
> > http://br.messenger.yahoo.com/
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
>
>
>  __________________________________________________
> Fale com seus amigos de graça com o novo Yahoo! Messenger
> http://br.messenger.yahoo.com/
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


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