[SP-pm] Ajuda com vetor de 2 dimensões

Blabos de Blebe blabos at gmail.com
Tue Dec 7 02:22:12 PST 2010


Bom dia Juliana,

Na linha,

print $vetor->[0], "=", $vetor->[1], "\n";

Você está acessando um elemento de um vetor *unidimensional*, mas o
seu "vetor" é *bidimensional*.

Mas antes de responder isso, você está usando open com 2 argumentos.
Isso é inseguro e pode causar muita dor de cabeça. Considere utilizar
o open com 3 argumentos, bem como use strict e use warnings

perldoc -f open

Agora voltando à programação normal, (bom o trocadilho hein!), tente:

print $vetor->[0]->[0], "=", $vetor->[0]->[1], "\n";

Para ver a cara da sua estrutura de dados, considere também:

use Data::Dumper;
...
print Dumper($data);

Abraços

2010/12/7 Renato Santos <renato.cron em gmail.com>
>
> Amigo,
> em perl, seria bem mais interessante você utilizar um HASH (ou como eu sou viciado, HASHREF)
>
> Hash é uma lista, mas no lugar de indexs, você tem strings.
> Por exemplo:
> $foo = {
>    eu_sou_uma_chave => 'eu_sou_o_valor'
> };
> Então, voce pode utilizar-se do push de uma array, monta assim, uma array de hash:
> open(my $frases, "set.txt") or die "Nao foi possivel abrir o arquivo: $!";
>
> my @vetor = ();
> my $pontuacao=0;
>
>
> while (my $linha = <$frases>) {
>   chomp($linha); # tira o fim de linha
>   push(@vetor, {
>     linha => $linha,
>     num_linha => $.,
>     pontuacao => $pontuacao
>   }); # se vc nao passar linha, vai pro $_
> }
>
> # aqui talvez tenha um codigo que vai mudar a pontuacao, correto? pois a pontuacao de todos esta zerada!
>
> # e aqui mostra na tela
> for my $item (@vetor){
>      print "$item->{num_linha}: $item->{linha} - $item->{pontuacao}\n";
> }
> ----------------------------
> Minhas considerações:
> você não deve sempre ler um arquivo e jogar numa array,
> se for fazer isso, você acaba jogando todo o arquivo na memoria, e
> se o arquivo tiver uns 100~  300 mb isso não é muito legal!
>
> 2010/12/7 Juliana <julianalduque em yahoo.com.br>
>>
>> Olá amigos da lista,
>>
>> Estou com dificuldade em implementar um código utilizando um vetor com 2 dimensões.
>>
>> Poderiam me dar uma dica de onde está o erro?
>> O código segue abaixo:
>>
>>
>> #abre arquivo de frases, uma frase por linha: frase1: xxxx; frase2: yyyyyy; frase3: zzzzz
>> open(my $frases, "set.txt") or die "Nao foi possivel abrir o arquivo: $!";
>>
>>
>> my @vetor=$frases;
>> my $pontuacao=0;
>> my $i=0;
>>
>> #insiro a frase a pontuacao em um vetor de duas dimensoes: posicao frase e posicao pontuacao
>> while (<$frases>) {
>> $vetor[$i] = [$frases, $pontuacao];
>> $i++;
>> }
>>
>> #imprimir todas as frases seguido de sua pontuacao : print $vetor->[$i], "=", $vetor->[$i], "\n"; ????
>> for my $vetor (@vetor){
>> print $vetor->[0], "=", $vetor->[1], "\n";
>>
>> }
>>
>> Aguardo contato.
>>
>> Obrigada!
>>
>> Abraços
>> Juliana
>>
>>
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
> --
> Renato Santos
> http://www.renatocron.com/blog/
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm


More information about the SaoPaulo-pm mailing list