[SP-pm] Leitura de arquivo - Lista

Eden Cardim edencardim em gmail.com
Sábado Julho 1 06:31:49 PDT 2006


On 6/30/06, Shadow Elf <daniel_5h4d0w em hotmail.com> wrote:
>
> Pessoal preciso da ajuda de vocês... por favor quem puder ajudar-me ficarei
> infinitamente grato!!!
>
> Bom o caso é o seguinte:
>
> Estou desenvolvendo um projeto que gera um arquivo de saida...
>
> mais as informações desse arquivo precisam ser recuperadas...
>
> O arquivo eh mais ou menos assim
>
> User:      Shadow Elf
> Number:  0040808
> Date:       30/06/2006
> Time:        10:34 pm
> Pwd:        Rambo**
>
> Mais esse arquivo eh um log aleatorio ou seja... gera varias entradas em um
> mesmo arquivo...
>
> User:      Chiquinha
> Number:  056456
> Date:       30/06/2006
> Time:        12:23 pm
> Pwd:        1234
>
> User:      Shadow Elf
> Number:  0040808
> Date:       30/06/2006
> Time:        10:34 pm
> Pwd:        Rambo**
>
> User:      Chavez
> Number:  0543513
> Date:       30/06/2006
> Time:        1:48 pm
> Pwd:        barril321

Eu mudaria esse formato para algo mais simples tipo CSV:

Chiquinha, 056456, 30/06/2006, 12:23 pm, 1234
Shadow Elf, 0040808, 30/06/2006, 10:34 pm, Rambo**
Chavez, 0543513, 30/06/2006, 1:48 pm, barril321

Continua legível, economiza espaço em disco, processamento e algumas
dores de cabeça futuras.

> Tenho que fazer o programa recuperar a partir de uma entrada... ou seja
> quando eu digitar: Shadow Elf
> o programa tera que ler a linha: User:      Shadow Elf e mais 4 linhas
> abaixo... no caso o resto das informações
> deste usuario...

Como é um log, presumo que o mesmo usuário pode ter várias entradas no
arquivo, então o código ficaria assim (com o formato de dados que eu
propus):
<code>
my $search_user = shift;

my @fields = qw(Number Date Time Pwd);
my @entries = map {
	my %entry;
	if(/^$search_user/) {
		(undef, @entry{@fields}) = split /\s*,\s*/;
		\%entry;
	} else { () }
} <DATA>;

print "Busca por usuário $search_user retornou:\n";
foreach my $entry (@entries) {
	print "$_:\t$entry->{$_}\n" foreach @fields;
	print "\n";
}
</code>

__DATA__
Chiquinha, 056456, 30/06/2006, 12:23 pm, 1234
Shadow Elf, 0040808, 30/06/2006, 10:34 pm, Rambo**
Chavez, 0543513, 30/06/2006, 1:48 pm, barril321

Fora que já existem vários módulos no cpan para parsear e fazer busca
em arquivos CSV.


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