[Cascavel-pm] Usando Hashes

Joenio Costa joenio em gmail.com
Quarta Março 7 05:21:52 PST 2007


Olá Paty,

Tô tentando entender seu problema, voce quer capturar em cada linha as
"colunas": Date, NAME, PO e STATE? Pelo exemplo que vc deu abaixo é
preciso obter: 2004, PORT, BL e SP. É isso?

Pelo código que voce enviou parece que essas colunas podem aparecer em
posições diferentes a depender do arquivo, estou certo?

Se minhas suposições acima estão corretas, faria o seguinte:

my %variaveis = (DATE => 0, NAME => 0, P0 => 0, STATE => 0);
my $dir="/teste/dados";
opendir( DIR, $dir );
while ( my $file = readdir(DIR) ) {
    chdir($dir);
    open my $fh, "<", $file;
    my $header = <$fh>;
    my @header = split(/\t/, $header);
    my $cont = @header;
    for($i=0; $i<$cont; $i++) {
         foreach (keys %variaveis) {
             $variaveis{$_} = $i if $_ eq $header[$i];
         }
    }
    while(<fh>) {
        my @row = split(/\t/, $_);
        foreach (keys %variaveis) {
            print $row[ $variaveis{$_} ] . "\n";
        }
    }
    close $fh;
}


ps.: (nao testei o código)

Att,

Em 05/03/07, Patty Silva<ptfzs em yahoo.com.br> escreveu:
> Ah.. outra coisa.. usei o FOR pq meu objetivo eh o seguinte..
> no arquivo tem o cabecalho e os dados logo abaixo
> Date   NAME PO STATE BLA BLE BLI CITY COUNTRY
> 2004   PORT   BL   SP   hj   HU   b   SP   BRASIL
> ..
> .
> ..
>
>
> Meu objetivo eh ler somente essas variaveis abaixo:
>
> my %variaveis = (
>     "DATE"      => "Data",
>     "Name"              => "Nome",
>     "P0"        => "Pre",
>     "state"        => "Estado"
>
> );
>
>
> Ai pensei com o numero recuperar so elas.. mas achu que nao dará certo..
>
>
> Entendeu?? :D um pouco confusa
>
>
>
>
> Nelson Ferraz <nferraz em gmail.com> escreveu:
>  Patty Silva wrote:
> > Ola Pessoal..
> > Vim pedir uma opniao de vcs..
> > Estou usando hash para modificar nomes de variaveis...
> > Leio em um arquivo texto, um cabeçalho so que as variavesi tem que ser
> diferentes..
>
> Patty,
>
> Gostei das primeiras linhas do seu script; mostram que você aprendeu
> bastante.
>
> Uma questão de estilo: porque você usou for($i=0;$i<$cont;$i++) ao invés
> de foreach(@fields)?
>
> De resto, o seu exemplo está incompleto. Você provavelmente vai querer
> armazenar todos os campos num array, ou aplicar uma expressão regular
> para modificar a linha de entrada.
>
> []s
>
> Nelson
>
> _______________________________________________
> 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
>


-- 
Joenio Costa
- Salvador Perl Mongers - Grupo de Usuário Perl de Salvador
- Colibre - Cooperativa de Tecnologias Livres
- PSL-BA - Projeto Software Livre Bahia


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