[Cascavel-pm] Pesquisa em array

Breno G. de Oliveira breno em clavis.com.br
Terça Maio 9 20:56:14 PDT 2006


Olá Steven,

Pode ser o sono, cansaço, ou pura ignorância mesmo, mas estou a uns 10
minutos olhando pro seu email e não consegui entender exatamente o que
vc quer fazer...

1) vc abre um "arquivos.txt" com nomes de arquivos inexistentes;
2) vc tem um diretório "jpg produtos" que possui arquivos da mesma
familia, mas com os 3 últimos dígitos diferentes;

Até aqui acho que foi. Vc tem uma lista do tipo

nome1.aaa
nome2.aaa
nome3.bbb
nome4.aaa
nome5.ccc
...

e no diretório vc tem:

nome1.bbb
nome2.ccc
nome3.ddd
...

3) Para cada nome na sua lista de arquivos, vc faz uma "padronização" do
tipo abaixo, de modo que, se na linha veio "nomeAM/AM_blabla.jpg\n", o
resultado será:

     $_ =~ s/\n//;       # nomeAM/AM_blabla.jpg
     $_ =~ s/AM\/AM//;   # nome_blabla.jpg
     $_ =~ s/_.*$//;     # nome
     $_ =~ s/\..*$//;    # nome

É isso mesmo que vc quer? Isso não me parece certo... talvez vc deva
colocar um "print" entre essas substituições para conferir se o nome
está sendo transformado da maneira adequada.

Bom, supondo que essa realmente seja o formato que vc precisa, se tudo
que vc quer é encontrar dentro do outro diretório alguma ocorrência
desse mesmo padrão, faça algo como:

opendir(DIR, $mydir) or die "$!\n";
while($nomearq = readdir(DIR)) {
     # submete as entradas no diretório ao mesmo padrão
     $nomearq =~ s/\n//;
     $nomearq =~ s/AM\/AM//;
     $nomearq =~ s/_.*$//;
     $nomearq =~ s/\..*$//;
     if($nomearq eq $nome_original) {
         # achou
     }
}
closedir(DIR);

naturalmente, uma escolha mais sensata seria fazer esse readdir() apenas
uma vez e jogar os nomes de arquivos devidamente dentro do seu padrão
num array. Assim, ao ler seu "arquivos.txt" e modificar cada entrada, vc
pode verificar a entrada direto no array já modificado, sem ter que
abrir o diretório toda vez.

É isso. TIMTOWTDI (como sempre) e desculpe o email longo, eu realmente
demorei pra entender o problema- aliás, ESPERO ter entendido mas ainda
não tenho certeza se é algo assim que vc quer!

[]s

breno


Brinde Storm - Steven Koch wrote:
> Boa tarde pessoa...
> 
> Tenho um arquivo .txt com um monte de nome de arquivos que não existe em um
> directorio.
> 
> E tenho um directorio que tem arquivos da mesma familia, mas com os ultimos
> 3 digitos diferentes.
> 
> Eu pegarei o primeiro nome de arquivo e farei as padronização e depois
> verificarei se existe algum arquivo similar no directorio, mas eu não sei
> qual o final do arquivo que no diretorio.
> 
> Estou conseguindo fazer a padronização na boa, mas não consigo pesquisar no
> directorio este padrao e encontrar um arquivo similiar.
> 
> 
> 
> open(ARQ, "arquivos.txt");
> $mydir = "D:\\ambientes 2006.1\\jpg produtos\\";#onde estão as imagens que
> devo pesquisar
> 
> while(<ARQ>){
>     $_ =~ s/\n//;
>     $_ =~ s/AM\/AM//;
>     $_ =~ s/_.*$//;
>     $_ =~ s/\..*$//;
> #Agora começa meu problema... Pois não sei que comando usar para encontrar
> este padrão no meio dos arquivo
> #Não funça... com -e o find não consegui usar.. E o grep no array dos
> directorios me retorna mais de uma opção ???
> 
> 
> _______________________________________________
> 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