[R] Recherche d'une chaine et récupération de celle qui suit
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Recherche d'une chaine et récupération de celle qui suit
Bonjours, le sujet à été traité plusieurs fois déjà j'en suis conscient, cela dit, chaque code étant différent, plus j'en lit et moins je comprend.
Je vous demande donc à nouveau de l'aide...
J'ai créé deux input.
Dans l'un j'écris un mot, dans l'autre apparait un mot correspondant au premier.
Pour cela j'ai créé un fichier txt qui se compose comme suit :
ratatouille = berk
frite = miam
ect...
Je veut que le mot que j'entre dans mon premier input (ex:ratatouille) soit cherché dans mon txt et que le mot correspondant (berk) soit inscrit dans mon second input.
J'ai trouvé les fonctions StringSplit et StringRegExp mais n'arrive pas a les utiliser car les cas présent sur le forum sont toujours sensiblement différent.
Pourriez vous me montrer la procédure s'il vous plait ?
Je vous demande donc à nouveau de l'aide...
J'ai créé deux input.
Dans l'un j'écris un mot, dans l'autre apparait un mot correspondant au premier.
Pour cela j'ai créé un fichier txt qui se compose comme suit :
ratatouille = berk
frite = miam
ect...
Je veut que le mot que j'entre dans mon premier input (ex:ratatouille) soit cherché dans mon txt et que le mot correspondant (berk) soit inscrit dans mon second input.
J'ai trouvé les fonctions StringSplit et StringRegExp mais n'arrive pas a les utiliser car les cas présent sur le forum sont toujours sensiblement différent.
Pourriez vous me montrer la procédure s'il vous plait ?
Modifié en dernier par Stigmate le dim. 01 mars 2009 22:04, modifié 3 fois.
- jbnh
- Niveau 11

- Messages : 1932
- Enregistré le : ven. 02 mai 2008 14:54
- Localisation : Bruxelles
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de
Salut.
Dans le cas par exemple où bonjour = coucou, $var2[2] ici retourne coucou.
A toi d'adapter le code pour ta GUI etc.
Code : Tout sélectionner
#include <file.au3>
Dim $array
;-------------------------------------------
$filename = 'test.txt'
;-------------------------------------------
_FileReadToArray($filename, $array)
For $X = 1 to $Array[0]
If StringInStr($array[$X], "bonjour") Then
$var = FileReadLine($filename, $X)
$var2 = stringsplit($var, "=")
msgbox(0,'', $var2[2])
EndIf
NextA toi d'adapter le code pour ta GUI etc.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !
Merci
Merci
Re: [..]Recherche d'une chaine et récupération de celle qui suit
Merci beaucoup sa marche très bien !
En revanche peut tu me commenter un peu les lignes contenant les array et se $var2[2] pour que je puisse comprendre tous cela
En revanche peut tu me commenter un peu les lignes contenant les array et se $var2[2] pour que je puisse comprendre tous cela
- jbnh
- Niveau 11

- Messages : 1932
- Enregistré le : ven. 02 mai 2008 14:54
- Localisation : Bruxelles
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de
_FileReadToArray($filename, $array) va enfait transformer le fichier en array ou si tu veux, le diviser ligne par ligne.
For $X = 1 to $Array[0] ,If StringInStr($array[$X], "bonjour") Then pour chaque ligne ( la 1 jusqu'a la dernière), on va chercher avec StringInStr "bonjour" dans la ligne.
$var = FileReadLine($filename, $X), $var2 = stringsplit($var, "=") si on trouve, on lit la ligne entière et on divise la ligne avec le "=", on obtient donc les deux éléments des deux cotés, bonjour et coucou
$var2[2], coucou vient en deuxième, d'où il constitue le deuxième élément de la variable $var2
Voilà
For $X = 1 to $Array[0] ,If StringInStr($array[$X], "bonjour") Then pour chaque ligne ( la 1 jusqu'a la dernière), on va chercher avec StringInStr "bonjour" dans la ligne.
$var = FileReadLine($filename, $X), $var2 = stringsplit($var, "=") si on trouve, on lit la ligne entière et on divise la ligne avec le "=", on obtient donc les deux éléments des deux cotés, bonjour et coucou
$var2[2], coucou vient en deuxième, d'où il constitue le deuxième élément de la variable $var2
Voilà
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !
Merci
Merci
Re: [..]Recherche d'une chaine et récupération de celle qui suit
Super, s'est très claire, merci beaucoup jbnh.
Oops une dernière petite question, récupérer les valeurs d'un input s'est simple, mais je ne sais pas en envoyer.
J'ai trouvé "GUICtrlSendMsg ( controlID, msg , wParam, lParam )"
Me semble il que cela peut faire l'affaire, mais je ne comprend pas quoi mettre a "wParam" et "IParam".
Peut tu m'éclairer s'il te plait ?
Oops une dernière petite question, récupérer les valeurs d'un input s'est simple, mais je ne sais pas en envoyer.
J'ai trouvé "GUICtrlSendMsg ( controlID, msg , wParam, lParam )"
Me semble il que cela peut faire l'affaire, mais je ne comprend pas quoi mettre a "wParam" et "IParam".
Peut tu m'éclairer s'il te plait ?
- jbnh
- Niveau 11

- Messages : 1932
- Enregistré le : ven. 02 mai 2008 14:54
- Localisation : Bruxelles
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de
Que veut tu dire par envoyer ? Mettre à jour l"info dans l'input ? Si oui, utiliser GUICtrlSetData
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !
Merci
Merci
Re: [..]Recherche d'une chaine et récupération de celle qui suit
Oui s'était sa. Tout fonctionne impeccable.
Encore merci a toi.
Encore merci a toi.
Re: [R]Recherche d'une chaine et récupération de celle qui suit
Salut, s'est encore moi
J'ai peut être parlé un peu vite, tout était parfait jusqu'a... se que je trouve les imperfections
j'explicite :
Si j'ai deux mots comme ceux ci :
une ratatouille = berk
Si je tape "une" ou bien "rata" j'obtient le résultat après le "=" , se que je ne veut pas.
Je veut obtenir berk uniquement si j'ai le groupe de mot "une ratatouille" en entier.
Quelle solution pourrais-je adopter ?
Peut être en comptant le nombre de lettre du mot entré et en comparant se nombre avec le nombre de lettre du mot de la liste...
J'ai peut être parlé un peu vite, tout était parfait jusqu'a... se que je trouve les imperfections
j'explicite :
Si j'ai deux mots comme ceux ci :
une ratatouille = berk
Si je tape "une" ou bien "rata" j'obtient le résultat après le "=" , se que je ne veut pas.
Je veut obtenir berk uniquement si j'ai le groupe de mot "une ratatouille" en entier.
Quelle solution pourrais-je adopter ?
Peut être en comptant le nombre de lettre du mot entré et en comparant se nombre avec le nombre de lettre du mot de la liste...
- jbnh
- Niveau 11

- Messages : 1932
- Enregistré le : ven. 02 mai 2008 14:54
- Localisation : Bruxelles
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de
Salut
En imaginant que la variable recherchée soit : Guictrlread($input), ca donnerait :
Attention j'ai changé le stringplit ($var, "=") en ($var, " =")
Dis moi quoi. Si ça marche pas hésite pas a poser ton script entier.
En imaginant que la variable recherchée soit : Guictrlread($input), ca donnerait :
Code : Tout sélectionner
_FileReadToArray($filename, $array)
For $X = 1 to $Array[0]
If StringInStr($array[$X], Guictrlread($input)) Then
$var = FileReadLine($filename, $X)
$var2 = stringsplit($var, " =")
If Guictrlread($input) = $var2[1] Then
msgbox(0,'', $var2[2])
Endif
EndIf
NextDis moi quoi. Si ça marche pas hésite pas a poser ton script entier.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !
Merci
Merci
- Tlem
- Site Admin

- Messages : 11798
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de celle qui suit
Une solution qui serait plus simple, serait de gérer le fichier txt comme un fichier .ini.
Donc il faudrait rajouter une balise ([CommeCeciParExemple]) en début de fichier et d'utiliser les fonction de lecture IniRead.
Donc il faudrait rajouter une balise ([CommeCeciParExemple]) en début de fichier et d'utiliser les fonction de lecture IniRead.
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é".
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é".
Re: [..]Recherche d'une chaine et récupération de celle qui suit
Oula je m'étais beaucoup compliqué la tache, il me manque encore quelques automatismes
J'avais doublé la longueur du code pour arriver au même résultat, en employant 2 fichiers txt
Mais bon sa m'a permit de comprendre comment fonctionnait les array
En changeant le StringSplit comme ceci : ($var, " =") , le code ne m'affiche pas toujours se qu'il faut.
Au final j'opte donc pour ceci, en enlevant les espaces dans mon fichier txt entre les mots et le "=" .
Cela nui un peu à la lisibilité dans le fichier txt mais tans pis
Merci jbnh !
- Concrètement en quoi la gestion comme dans un fichier ini me simplifi la tache ?
Que je sache si sa vaut vraiment la peine que je me casse la tête dessuite ou si je peut encore attendre un peu
- Encore une petite question, je me rend compte au final que les array sont bien pratique, dans un fichier on utilise _FileReadToArray , qu'utilise t'on pour lire dans un array une valeur entré dans une input (sans passer par un fichier)? La même chose ?
J'avais doublé la longueur du code pour arriver au même résultat, en employant 2 fichiers txt
Mais bon sa m'a permit de comprendre comment fonctionnait les array
En changeant le StringSplit comme ceci : ($var, " =") , le code ne m'affiche pas toujours se qu'il faut.
Au final j'opte donc pour ceci, en enlevant les espaces dans mon fichier txt entre les mots et le "=" .
Cela nui un peu à la lisibilité dans le fichier txt mais tans pis
Code : Tout sélectionner
_FileReadToArray($filename, $array)
For $X = 1 to $Array[0]
If StringInStr($array[$X], Guictrlread($input)) Then
$var = FileReadLine($filename, $X)
$var2 = stringsplit($var, "=")
If Guictrlread($input) = $var2[1] Then
msgbox(0,'', $var2[2])
Endif
EndIf
Next
- Concrètement en quoi la gestion comme dans un fichier ini me simplifi la tache ?
Que je sache si sa vaut vraiment la peine que je me casse la tête dessuite ou si je peut encore attendre un peu
- Encore une petite question, je me rend compte au final que les array sont bien pratique, dans un fichier on utilise _FileReadToArray , qu'utilise t'on pour lire dans un array une valeur entré dans une input (sans passer par un fichier)? La même chose ?
- jbnh
- Niveau 11

- Messages : 1932
- Enregistré le : ven. 02 mai 2008 14:54
- Localisation : Bruxelles
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de
Salut,
Pour les fichiers INI, je t'invite à faire des cherches sur le forum et lire la documentation ici en cherchant tout ce qui commence par ini.
Pour ta deuxième question, tu pourrais éventuellement faire comme suit :
Le stringsplit divise ici ton input qui a plusieurs lignes en lignes séparées.
Pour les fichiers INI, je t'invite à faire des cherches sur le forum et lire la documentation ici en cherchant tout ce qui commence par ini.
Pour ta deuxième question, tu pourrais éventuellement faire comme suit :
Code : Tout sélectionner
$line = StringSplit(GuiCtrlRead($input), @CR)
For $i = 1 To $line[0]
;Les actions ici s'appliqueront pour chaque ligne
NextBalise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !
Merci
Merci
- Tlem
- Site Admin

- Messages : 11798
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..]Recherche d'une chaine et récupération de celle qui suit
L'utilisation du fichier au format fichier ini vous simplifiera grandement la tâche, car plus besoin de lire le fichier dans un tableau et de faire du StringSplit pour récupérer la valeur après le = ...
De plus la lecture se fera sur la chaîne exacte et non sur une partie de la chaîne.
Testez et voyez la simplicité d'utilisation.
De plus la lecture se fera sur la chaîne exacte et non sur une partie de la chaîne.
Testez et voyez la simplicité d'utilisation.
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é".
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é".
Re: [..]Recherche d'une chaine et récupération de celle qui suit
Sa a l'air effectivement plus simple j'essayerais donc le ini la prochaine fois =)
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [R]Recherche d'une chaine et récupération de celle qui suit
Au lieu des INI (limités), je te conseil tout de suite de passer à ces fontions, qui "imitent" la gestion d'ini, mais avec moins de probleme (je dis ca surtout si tu veux depasser les 64ko de donné, ce qui est assez vite fait dans certain cas)
http://www.autoitscript.com/forum/index ... ntry371817
Merci à Tlem pour le lien
http://www.autoitscript.com/forum/index ... ntry371817
Merci à Tlem pour le lien
Signez ici
Re: [R] Recherche d'une chaine et récupération de celle qui suit
Oui en effet mon fichier risque de prendre très rapidement du volume étant donné que s'est un dictionnaire =)
Merci pour l'infos !
Stig.
Merci pour l'infos !
Stig.

