OVH Cloud OVH Cloud

recherche multi tableau

35 réponses
Avatar
Fabrice L.
Bonjour,

je recherche dans un fichier plusieurs mots (il peut y en avoir des
centaines)

mon pb est que ...

while (<F>) {

if ($_ =~ /occurence1/) { ... }
elsif ($_ =~ /occurence2/) { ... }
elsif ($_ =~ /occurence3/) { ... }
elsif ($_ =~ /occurence4/) { ... }
elsif ($_ =~ /occurence5/) { ... }
else { ...}
}
etc...

...devient vite une usine a gaz surtout quand vous rechercher dans un
fichier de plusieurs milliers de lignes une centaine d'occurences
différentes.
J'ai pensé mettre mes différentes occurences dans un tableau mais je ne vois
pas comment rechercher par la suite.
Mon deuxieme souci est le temps d'execution et l'utilisation CPU/ RAM.

Je suis preneur de toutes idées et/ou direction possible.

Merci d'avance

Fabrice

5 réponses

1 2 3 4
Avatar
Antoine Dinimant
open F, "$dir_fichier";
@F = <F>;
close F or die "unlock: $!n";

foreach (@F) {

$or{'Free'}++ if (grep (/free.fr/google.pl/,$_));
$or{'Google Images'}++ if (grep (/images.google/,$_));
...

### etc
}

cela dit, on doit pouvoir améliorer ce qui se trouve dans la boucle pour
eviter de tout ecrire mais pour l'instant ca ira. de plus a l'utilisation,
grep est tres rapide, moins d'1 seconde pour traiter les memes 18000 lignes
du fichier.


Avec un hash du genre :
my %domaines = ('free.fr' => 'Free',
'images.google' => 'Google Images',
'google.fr' => 'Google France',
...) ;

tu as juste à boucler sur les clés, et à incrémenter ton %or selon les
valeurs :

open F, "$dir_fichier";
while (<F>) {
foreach my $dom (keys %domaines) {
$or{$domaines{$dom}}++ if index(lc, $dom) > - 1 ;
}
}

PS : au passage, une regex comme /free.fr/google.pl/ ça veut dire
quoi pour toi ???

Avatar
Fabrice L.

Avec un hash du genre :
my %domaines = ('free.fr' => 'Free',
'images.google' => 'Google Images',
'google.fr' => 'Google France',
...) ;

tu as juste à boucler sur les clés, et à incrémenter ton %or selon les
valeurs :

open F, "$dir_fichier";
while (<F>) {
foreach my $dom (keys %domaines) {
$or{$domaines{$dom}}++ if index(lc, $dom) > - 1 ;
}
}


C pas mal ca ! faut que je teste !


PS : au passage, une regex comme /free.fr/google.pl/ ça veut dire
quoi pour toi ???



rechercher si dans le fichier se trouve 'free.fr/google.pl' j'ai echappé les
. ct pas vraiement utile ... mais bon ...

Fabrice

Avatar
Antoine Dinimant
PS : au passage, une regex comme /free.fr/google.pl/ ça veut dire
quoi pour toi ???




rechercher si dans le fichier se trouve 'free.fr/google.pl' j'ai echappé les
. ct pas vraiement utile ... mais bon ...


j'ai bien compris l'échappement des points, mais c'est quoi
free.fr/google.pl ???


Avatar
Fabrice L.
l'url des pages de resultats du moteur de recherche du site free.fr !

Fab


"Antoine Dinimant" a écrit dans le message news:


PS : au passage, une regex comme /free.fr/google.pl/ ça veut dire
quoi pour toi ???




rechercher si dans le fichier se trouve 'free.fr/google.pl' j'ai echappé
les


. ct pas vraiement utile ... mais bon ...


j'ai bien compris l'échappement des points, mais c'est quoi
free.fr/google.pl ???





Avatar
antoun
j'ai bien compris l'échappement des points, mais c'est quoi
free.fr/google.pl ???


l'url des pages de resultats du moteur de recherche du site free.fr !


damned ! merci.


1 2 3 4