Page 1 sur 2
[..] Trouver une ligne depuis un mot présent dans cette lign
Posté : dim. 13 nov. 2011 12:53
par Expendables
Bonjour,
j'aimerais que le script puisse trouver un mot et quand il le trouve il copie toute la ligne dans un fichier text, ce mot p-e present plusieurs fois dans le texte (bloc note) voila merci
ex mot : beau
il est beau l'oiseau
texte a copier : il est beau l'oiseau
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : dim. 13 nov. 2011 13:28
par PandiPanda
et vous voulez récuperer toute les lignes ou se trouve se mot ?
du genre ce texte ci;
il est beau l'oiseau
quel beau temps dehor
ca va ?
oui il fait bien beau aujourd'hui
Vous voulez récuperer seulement "il est beau l'oiseau" ou aussi "quel beau temps dehor" et "oui il fait bien beau aujourd'hui" ??
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : dim. 13 nov. 2011 13:30
par TT22
Est-ce que cela te convient :
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
$File = @ScriptDir&"\Nouveau document texte.txt" ; <== Fichier dans lequel chercher.
$Char = "corbeau" ; <== Caractère à chercher
$exist = FileExists($File)
If $exist = 0 Then
MsgBox(16,"Erreur","Le fichier spécifié est introuvable.")
EndIf
If $exist = 1 Then
$line_number = _FileCountLines($File)
$line_tested = 0
$trouver = 0
$Rep = ""
While 1
$line_tested = $line_tested +1
$line_to_test = FileReadLine($File,$line_tested)
FileWrite(@TempDir&"\temp_search",$line_to_test)
$il_y_est=_ReplaceStringInFile(@TempDir&"\temp_search",$Char,"")
If $il_y_est = 1 Then
$Rep = $Rep&@CRLF&FileReadLine($File,$line_tested)
$trouver = 1
EndIf
FileDelete(@TempDir&"\temp_search")
If $line_tested = $line_number Then
ExitLoop
EndIf
WEnd
If $trouver = 0 Then
MsgBox(16,"Erreur","Les caractères choisis sont introuvables.")
Exit
EndIf
MsgBox(64,"Info",$Rep)
EndIf
Et voici le fichier à chercher
► Afficher le texteNouveau document texte.txt
Code : Tout sélectionner
Maître Corbeau, sur un arbre perché,
Tenait en son bec un fromage.
Maître Renard, par l'odeur alléché,
Lui tint à peu près ce langage :
"Hé ! bonjour, Monsieur du Corbeau.
Que vous êtes joli ! que vous me semblez beau !
Sans mentir, si votre ramage
Se rapporte à votre plumage,
Vous êtes le Phénix des hôtes de ces bois. "
A ces mots le Corbeau ne se sent pas de joie ;
Et pour montrer sa belle voix,
Il ouvre un large bec, laisse tomber sa proie.
Le Renard s'en saisit, et dit : "Mon bon Monsieur,
Apprenez que tout flatteur
Vit aux dépens de celui qui l'écoute :
Cette leçon vaut bien un fromage, sans doute. "
Le Corbeau, honteux et confus,
Jura, mais un peu tard, qu'on ne l'y prendrait plus.
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : dim. 13 nov. 2011 13:42
par PandiPanda
Sinon, vou avez toujours ceci;
► Afficher le texte
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
Local $pathFile=@ScriptDir&"\test.txt"
Local $motChercher="beau"
Local $array=Expendables($pathFile,$motChercher)
_ArrayDisplay($array)
Func Expendables($pathFile,$motChercher)
Local $arrayLine
_FileReadToArray($pathFile,$arrayLine)
If @error Then
MsgBox(0,'',"erreur ouverture du fichier texte")
Exit
EndIf
Local $str=""
For $i=1 To $arrayLine[0]
If StringInStr($arrayLine[$i],$motChercher) <> 0 Then
$str&=$arrayLine[$i]&"[ID:Pandi]"
EndIf
Next
$str=StringTrimRight($str,10)
Return StringSplit($str,"[ID:Pandi]",3)
EndFunc
► Afficher le textetest.txt
il est beau l'oiseau
quel beau temps dehor
ca va ?
oui il fait bien beau aujourd'hui
Cette fonction, retourne un array avec pour chaque "case du tableau" une ligne correspondante dans le fichier .txt
voila, si vous ne voulez recuperer que la 1ère valeur d'un fichier texte, il vous suffit d'utiliser l'index 0 => array[0] pour l'avoir, si vous voulez toute les valeurs, il suffit de faire une boucle "For ... Next".
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : dim. 13 nov. 2011 17:54
par mikell
Tin vous êtes vraiment compliqués les mecs...
à utiliser avec la fable de TT22 :
Code : Tout sélectionner
$file = FileOpen("fable.txt", 0)
$recup = FileOpen("recup.txt", 1)
$mot = "corbeau"
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line, $mot, 0) Then FileWriteLine($recup, $line)
Wend
FileClose($file)
FileClose($recup)
ShellExecute("recup.txt")
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : dim. 13 nov. 2011 22:30
par Tlem
Sinon, question rapidité et possibilité, vous avez ceci :
http://www.autoitscript.com/forum/topic ... -directory
- Très rapide.
- Permet de chercher dans un ou plusieurs fichiers.
- Recherche récursive.
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : lun. 14 nov. 2011 00:03
par jchd
StringInStr va nous draguer un peu trop de 'beau' : "Un bel esca
beau"
Code : Tout sélectionner
#include <File.au3>
Local $mot = "sa"
_FileWriteFromArray("extraits.txt", StringRegExp(FileRead("fable.txt"), "(?im)(^.*\b" & $mot & "\b.*)(?:\r\n?$)", 3))
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 14:26
par davzell
salut, je remonte ce vieux post car un des codes m’intéresse pas mal.
j'utilise ce code pour récup une phrase qui ressemble à ça dans un fichier de log
ID= 27896543
dans le log j'ai d'autre phrase du type
ID= 0
est ce qu'il y a un moyen d'ignorer les ligne avec le 0 ?
ou alors il faut les supprimer a la fin lorsqu'on crée le *.txt ?
Code : Tout sélectionner
$file = FileOpen("fable.txt", 0)
$recup = FileOpen("recup.txt", 1)
$mot = "ID"
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line, $mot, 0) Then FileWriteLine($recup, $line)
Wend
FileClose($file)
FileClose($recup)
ShellExecute("recup.txt")
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 14:39
par sksbir
pour les fanas de linux, il existe des portages sous windows de la commande grep, ou awk...
D'ailleurs, ça serait une idée de script à réaliser avec autoit, ça, histoire de résoudre tous les problèmes de ce type d'un coup

Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 15:12
par jguinch
L'extraction peut être faite directement en passant par une expression régulière.
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
$file = "qsdf qsdf qsdf qf " & @CRLF & "sdfqsdf ID= 27896543 sdf qsdf" & @CRLF & "ID =0 qsdf qdf "
$results = StringRegExp($file, "ID=\s?[1-9]\d+", 3)
_ArrayDisplay($results)
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 15:30
par davzell
jguinch a écrit :L'extraction peut être faite directement en passant par une expression régulière.
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
$file = "qsdf qsdf qsdf qf " & @CRLF & "sdfqsdf ID= 27896543 sdf qsdf" & @CRLF & "ID =0 qsdf qdf "
$results = StringRegExp($file, "ID=\s?[1-9]\d+", 3)
_ArrayDisplay($results)
a par contre le fameux les nombre de l'ID= 27896543 sont aléatoire et change dans chaque log donc est ce qu'on peut tjr adapter ce code ou il vaut mieux passer par autre chose ?
sachant que le chiffres derrière ID= fait 9 ou 10 chiffre (ou alors juste 0)
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 15:43
par jguinch
davzell a écrit :a par contre le fameux les nombre de l'ID= 27896543 sont aléatoire
Oui, j'avais bien compris...
Si c'est 9 ou 10 chiffres, ça devrait contevenir :
Par contre, est-ce que le nombre peut commencer par un 0 (ex : 0123456789) ?
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 16:57
par davzell
non l'ID commence tjr par un 1 ou 9
du coup c'est plutôt ca
Code : Tout sélectionner
$results = StringRegExp($file, "ID=\s?[1-9]\d[b]{1[/b],9}\b", 3)
que
Code : Tout sélectionner
$results = StringRegExp($file, "ID=\s?[1-9]\d[b]{8[/b],9}\b", 3)
?
j'ai voulu l'adapter avec le reste du code pour extraire dans tout le fichier de log mais pour le moment ça coince..
Code : Tout sélectionner
$file = FileOpen("Logfile.log", 0)
$line = FileReadLine($file)
$results = StringRegExp($line, "ID=\s?[1-9]\d{8,9}\b", 3)
_ArrayDisplay($results)
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 17:51
par jguinch
Non, du coup c'est plutôt
$results = StringRegExp($file, "ID=\s?[19]\d{8,9}\b", 3)
Si on décortique :
ID= : ID=
\s? : un espace ou non
[19] : 1 ou 9
\d{8,9} : n'importe quel chiffre 8 ou 9 fois.
Donc l'expression ci-dessus extrait toutes chaines qui commencent par contiennent "ID=", suivit d'un ou aucun espace, suivit de 1 ou 9, suivit de 8 chiffres
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 22:12
par jchd
Pour la bonne compréhension :
toutes chaines qui commencent par "ID="
Que nenni : "qui contiennent"
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : jeu. 27 mars 2014 22:33
par jguinch
Ah oui, c'est vrai JC, je suis allé un peu vite.

j'ai édité mon post.
Mais ça me fait penser que finalement, l'énoncé n'est pas complet...
Que veux-tu récupérer exactement ? La ligne complète ? Juste le numéro ? L'ensemble "ID= XXXXXXXXX" ?
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : ven. 28 mars 2014 08:59
par davzell
uniquement les nombre après ID serait le top
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : ven. 28 mars 2014 10:26
par jguinch
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : ven. 28 mars 2014 11:07
par davzell
ca marche nikel merci bien
et du coup le fait que je puisse pas le faire fonctionner avec le filereadline c'est parce qu'il vaut mieux utiliser une autre fonction ou parce que je l'ai mal écrit ?
Code : Tout sélectionner
$file = FileOpen("Logfile.log", 0)
$line = FileReadLine($file)
$results = StringRegExp($line, "ID=\s?[1-9]\d{8,9}\b", 3)
_ArrayDisplay($results)
Re: [..] Trouver une ligne depuis un mot présent dans cette
Posté : ven. 28 mars 2014 11:29
par jguinch
FileReadLine va te lire une seule ligne.
Utilise FileRead(), ça lira tout le fichier d'un coup.