Bonjour à tous,

Je manipule actuellement d'assez gros fichiers (quelques Go chacuns). Pour l'exemple, disons que ce sont des livres sur le fromage.

Je cherche à trouver la position d'une liste de mots dans mon texte. Je pensais faire une expression régulière du type :
Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
if( $w =~ m/cantal/ ) { ... }
Puis de tester pour tous mes mots. Malheureusement, je ne sais pas comment afficher la position de mon match. Est-ce possible ?
De plus j'ai peur que le process soit long puisqu'il faut systématiquement parcourir tout le fichier.

Une autre possibilité serait :
Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
while($i<length($texte)){
$mot=substr($i,$i+10); ## je créé une substr pour que ce soit moins lourd a traiter, et je suppose qu'aucun mot ne dépasse 10 caractère
foreach $fromage (@MaListeDeFromage){
if( $mot =~ m/^$fromage/ ) {
print "$fromage : $i \n";  ## ou faire une hash pour pouvoir classer par fromage...
}}
$i++;
}
Dans ce cas, deux points me font peurs :
1-la variable $texte contiendrait tout mon fichier de plusieurs Go...
2-Une boucle de quelques milliards d'occurence ça peut être long... même en perl...

Y a t'il des façons plus simples ? Bibliothèques ? etc ? Peut être parser mon fichier ligne par ligne ? (je veux aussi savoir si mon mot arrive en bout de ligne ; il pourrait y avoir un saut de ligne au milieu du mot... Donc il faudrait gérer ce cas en mettant en mémoire les derniers caractères de la ligne précédente ? )

Merci pour votre aide!

Edit : typo...