[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