Page 1 sur 1

Recherche dans plusieurs fichiers a plat et afficher dans tableau

Posté : mar. 16 févr. 2021 14:28
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

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

Posté : mar. 16 févr. 2021 19:44
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
 

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

Posté : mer. 17 févr. 2021 01:43
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)

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

Posté : mer. 17 févr. 2021 08:34
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

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

Posté : sam. 20 févr. 2021 18:50
par Nine
J'ai fait un UDF qui fait pas mal ce que OP demande :

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