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
Et voici le fichier à chercher
► Afficher le texteNouveau document texte.txt

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
► Afficher le textetest.txt
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... :mrgreen:
à 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 escabeau"

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 8)

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

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

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 :

Code : Tout sélectionner

$results = StringRegExp($file, "ID=\s?[1-9]\d{8,9}\b", 3)
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. :oops: 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

Code : Tout sélectionner

$results = StringRegExp($file, "ID=\s?([1-9]\d{8,9}\b)", 3)

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.