Recherche dans plusieurs fichiers a plat et afficher dans tableau

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
cyril69
Niveau 1
Niveau 1
Messages : 5
Enregistré le : jeu. 06 févr. 2020 17:02
Status : Hors ligne

Recherche dans plusieurs fichiers a plat et afficher dans tableau

#1

Message par cyril69 »

Bonjour,
J'ai plusieurs fichiers à plat avec chacun plusieurs lignes de texte.
Je souhaiterai faire une recherche dans tous ces fichiers (par exemple "rouge") et afficher dans un tableau toutes les lignes qui continent "rouges".

Ca doit pas etre tres compliqué mais je n'arrive deja pas a le faire pour un seul fichier sur les 100 premiers lignes.

Voici mon code:

Code : Tout sélectionner


#include <array.au3>
#include <MsgBoxConstants.au3>
#include <string.au3>
#include <File.au3>

Dim $aArray[1]

$filename = 'symbols-test'
$file = FileOpen($filename, 0)
$read = FileRead($file)
$line = StringSplit($read, @CRLF)

;MsgBox(0, "test", "test")

For $i = 1 To 100   ;$line[0]

$var = FileReadLine($file, $i)
$aArray = $line

Next

FileClose($filename)

_ArrayDisplay($aArray, "Coucou")

Exit
Quelqu'un peut m'aider?
merci d'avance,
cdt
cyril
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6089
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Recherche dans plusieurs fichiers a plat et afficher dans tableau

#2

Message par mikell »

Vite fait, un exemple de fonction pour chercher un mot dans un fichier, ça affiche les lignes avec leur numéro
Mais ça matchera "rouge", "rouges", "rougeoyer" etc

#Include <Array.au3>

$word = "rouge"  
$file = @scriptdir & "\fichier_test.txt"

$result = _Search($file, $word)
 _ArrayDisplay($result)

;================================================
Func _Search($au3, $word)
  $file = FileRead($au3)
  $lines = StringRegExp($file, '(\N*)\R?', 3)
  Local $array[UBound($lines)][2], $n = 0
  For $j = 0 to UBound($lines)-1  ; lignes
     If StringRegExp($lines[$j], '(?i)\b' & $word) Then
            $array[$n][0] = $j+1
            $array[$n][1] = StringStripWS($lines[$j], 3)
            $n += 1
     EndIf
  Next
  Redim $array[$n][2]
  Return $array
EndFunc
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11638
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Recherche dans plusieurs fichiers a plat et afficher dans tableau

#3

Message par Tlem »

Bonsoir.
Voici une solution a base de StringInStr. Cette recherche retournera aussi les lignes contenant "carouge" ou "infrarouge" (ce qui n'est pas le cas du code précédent).
Si vous voulez rechercher par mot entier, alors rajoutez un espace avant et un espace après.

Code : Tout sélectionner

#Include <Array.au3>

$word = "rouge"
$file = @scriptdir & "\fichier_test.txt"

Local $hFile = FileOpen($file)
Local $Count = 0, $sLine, $NBLines, $aLines

While 1
	$Count += 1
	$sLine = FileReadLine($hFile)
	If @error Then ExitLoop
	If StringInStr($sLine, $word) Then $NBLines &= $Count & "|"
Wend

$aLines = StringSplit(StringTrimRight($NBLines, 1), "|")

 _ArrayDisplay($aLines)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6089
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Recherche dans plusieurs fichiers a plat et afficher dans tableau

#4

Message par mikell »

Tlem a écrit : mer. 17 févr. 2021 01:43Si vous voulez rechercher par mot entier, alors rajoutez un espace avant et un espace après.
Ce qui ne marchera pas si le mot est en début ou en fin de ligne.
Mais c'est vrai que la demande mériterait dêtre plus précise
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 48
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: Recherche dans plusieurs fichiers a plat et afficher dans tableau

#5

Message par Nine »

J'ai fait un UDF qui fait pas mal ce que OP demande :

https://www.autoitscript.com/forum/topi ... le-or-au3/
Répondre