[..] Trouver une ligne depuis un mot présent dans cette lign

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Expendables
Niveau 3
Niveau 3
Messages : 39
Enregistré le : ven. 14 janv. 2011 12:08
Status : Hors ligne

[..] Trouver une ligne depuis un mot présent dans cette lign

#1

Message 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
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#2

Message 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" ??
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#3

Message par TT22 »

Est-ce que cela te convient :
► Afficher le texte
Et voici le fichier à chercher
► Afficher le texteNouveau document texte.txt
Cordialement,
TT22
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#4

Message 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".
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#5

Message 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")
" 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 : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#6

Message 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.
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
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#7

Message 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))
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#8

Message 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")
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#9

Message 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)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#10

Message par jguinch »

L'extraction peut être faite directement en passant par une expression régulière.
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#11

Message 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)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#12

Message 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) ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#13

Message 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)
 
Modifié en dernier par mikell le jeu. 27 mars 2014 18:20, modifié 1 fois.
Raison : citation supprimée
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#14

Message 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
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#15

Message par jchd »

Pour la bonne compréhension :
toutes chaines qui commencent par "ID="
Que nenni : "qui contiennent"
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#16

Message 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" ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#17

Message par davzell »

uniquement les nombre après ID serait le top
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#18

Message par jguinch »

Code : Tout sélectionner

$results = StringRegExp($file, "ID=\s?([1-9]\d{8,9}\b)", 3)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#19

Message 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)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#20

Message par jguinch »

FileReadLine va te lire une seule ligne.
Utilise FileRead(), ça lira tout le fichier d'un coup.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre