Recherche de mots dans un fichier texte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Westcb28
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mer. 01 juil. 2015 10:06
Status : Hors ligne

Recherche de mots dans un fichier texte

#1

Message par Westcb28 » jeu. 06 déc. 2018 14:47

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.

Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 553
Enregistré le : jeu. 10 juin 2010 09:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: Recherche de mots dans un fichier texte  

#2

Message par ZDS » ven. 07 déc. 2018 15:22

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 !
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !

Westcb28
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mer. 01 juil. 2015 10:06
Status : Hors ligne

Re: Recherche de mots dans un fichier texte

#3

Message par Westcb28 » ven. 07 déc. 2018 15:43

Bojour ZDS, un grand merci, c'est juste ce que je cherchais. Bon week end

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Recherche de mots dans un fichier texte

#4

Message par walkson » sam. 08 déc. 2018 18:54

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é.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Répondre