Page 1 sur 1

Recherche de mots dans un fichier texte

Posté : jeu. 06 déc. 2018 14:47
par Westcb28
Bonjour tout le monde,

Je sollicite votre aide pour comprendre comment je pourrais faire pour chercher un ou plusieurs mots dans un fichier texte.

Hors mon souci est de pouvoir afficher un message si le script trouve un ou deux mots, les deux, voir plusieurs autres au besoin ($ChaineRecherchee/$ChaineRecherchee2/ETc.. ci-dessous).

Sauf que mon code ci-dessous n'affiche le message QUE si les 2 mots sont trouvés. Je vous avoue que je débute un peu mais j'ai testé le code suivant qui fait presque ce que je veux.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$NomFichier = "C:\Temp\feu_synthese_HOSTING.log" ; le nom du fichier a parcourir

$ChaineRecherchee = FRANCE" ; le nom de l'utilisateur en  cours
$ChaineRecherchee2 = "
ITALIE" ; le nom de l'utilisateur en  cours

$Resultat = "
" & @CRLF & $ChaineRecherchee & @CRLF & $ChaineRecherchee2 & @CRLF & " sont en erreurs." ; le début de la popup en cas de résultat
$Trouve = False ; le switch qui indiquera si on trouve

$Fichier = FileOpen($NomFichier, 0) ; on ouvre le fichier
If $Fichier = -1 Then ; Vérification que le fichier est correctement ouvert
    MsgBox(0, "
ERREUR", "Impossible d'ouvrir le fichier " & $NomFichier )
    Exit
EndIf

While 1 ; Et on parcoure le fichier...
    $ligne = FileReadLine($Fichier) ; ... en lisant chaque ligne...
    If @error = -1 Then ; ... jusqu'
a la fin...
        ExitLoop
    Else
        If StringInStr($ligne,$ChaineRecherchee,2) and StringInStr($ligne,$ChaineRecherchee2,2) <> 0 Then ; Si on trouve la chaine a chercher dans la ligne
            $Resultat = $Resultat & ", " ; ... on l'inscrit dans les résultats ...
            $Trouve = True ;... et on précise qu'on a trouvé
        EndIf
        EndIf

Wend

FileClose($NomFichier) ; on n'oublie pas de fermer le fichier

if $Trouve = True Then; Si on a trouvé...
    msgbox(0,"ATTENTION",StringTrimRight($Resultat,2)) ; ... On l'affiche
Else ; ... sinon ...
    MsgBox(0,"Résultat", chr(34) & $ChaineRecherchee & chr(32) & $ChaineRecherchee2 & chr(34) & " n'a pas été trouvé")
EndIf
Merci d'avance pour votre aide.

Re: Recherche de mots dans un fichier texte  

Posté : ven. 07 déc. 2018 15:22
par ZDS
Bonjour West,

Voila un exemple de correction :

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Local $NomFichier = "C:\Temp\feu_synthese_HOSTING.log" ; le nom du fichier a parcourir

Local $ChainesRecherchees = "FRANCE,ITALIE,ALLEMAGNE,ANGLETERRE" ; En chaine complète, on fera un split plus tard

Local $Fichier = FileOpen($NomFichier, 0) ; on ouvre le fichier
If $Fichier = -1 Then ; Vérification que le fichier est correctement ouvert
    MsgBox(0, "ERREUR", "Impossible d'ouvrir le fichier " & $NomFichier )
    Exit
EndIf

Local $n = 0, $resultat = ""
While 1 ; Et on parcoure le fichier...
    Local $ligne = FileReadLine($Fichier) ; ... en lisant chaque ligne...
    If @error Then ExitLoop ; ... jusqu'a la fin...
	$n = $n+1
	; Sur chaque ligne on cherche les différentes chaines
	Local $found = ""
	For $chaine In StringSplit($ChainesRecherchees,",")
		If IsString($chaine) And StringInStr($ligne, $chaine) Then
			$found &= " " & $chaine
		EndIf
	Next
	If $found = "" Then
		; Pas d'éléments trouvé
	Else
		$resultat &= @CRLF & "Ligne #"&$n&" : "&$found
	EndIf
Wend

FileClose($NomFichier) ; on n'oublie pas de fermer le fichier

If $resultat = "" Then
    MsgBox(0, "OK", "Aucune valeur suivante n'a été trouvée :" & @CRLF & $ChainesRecherchees)
Else ; ... sinon ...
    MsgBox(0, "KO", "Une ou plusieurs valeurs suivantes ont été trouvées :" & @CRLF & $ChainesRecherchees & @CRLF & @CRLF & "RESULTAT :"&$resultat)
EndIf
A bientôt !

Re: Recherche de mots dans un fichier texte

Posté : ven. 07 déc. 2018 15:43
par Westcb28
Bojour ZDS, un grand merci, c'est juste ce que je cherchais. Bon week end

Re: Recherche de mots dans un fichier texte

Posté : sam. 08 déc. 2018 18:54
par walkson
Bonjour,
Une petite remarque sur la méthode StringInStr($ligne, $chaine) retourne la première occurrence et donc si, par exemple, sur une même ligne, on a 2 fois FRANCE, le deuxième FRANCE sera ignoré.

Re: Recherche de mots dans un fichier texte

Posté : lun. 10 déc. 2018 10:11
par Westcb28
Merci walkson pour cette remarque