[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