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 :
Puis de tester pour tous mes mots. Malheureusement, je ne sais pas comment afficher la position de mon match. Est-ce possible ?
Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if( $w =~ m/cantal/ ) { ... }
De plus j'ai peur que le process soit long puisqu'il faut systématiquement parcourir tout le fichier.
Une autre possibilité serait :
Dans ce cas, deux points me font peurs :
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++; }
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...
Partager