Page 1 sur 1
[R] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 20:26
par Nilak
Hello,
Je suis face à un probleme assez incompréhensible... J'utilise un petit programme qui charge des profils qui contiennent des valeurs que je ne dois pas ressaisir... Pour ça j'utilise un fichier texte qui a cet architecture:
Profil1| Valeur 1 | Valeur 2 | Valeur N... ligne1
Profil2| Valeur 1 | Valeur 2 | Valeur N... ligne2
ProfilN...
Dans mon programme j'ai une liste avec tous mes profils enregistrés, je sélectionne un profil puis je le charge, pour savoir quelles valeurs le programme charge j'utilise ce code:
Code : Tout sélectionner
$L = 1
Do
$readline = FileReadLine("pref.cfg",$L)
MsgBox(0,"",$readline)
MsgBox(0,"",$profil)
$presence = StringInStr($readline,$profil)
MsgBox(0,"",$presence & @ERROR)
$L = $L + 1
Until $presence = 1
Et c'est là, que je ne comprends absolument pas. Si je charge le profil qui se trouve sur la première ligne, ça marche, mais sur une autre ligne, ça ne fonctionne plus... Et j'ai toujours "00" en message d'erreur...
Quelqu'un voit comment faire?
Merci par avance!
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 20:38
par bloodwolff
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 20:43
par Nilak
Fonctionne toujours aussi bizarrement!
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 20:50
par bloodwolff
Et sa ?
Code : Tout sélectionner
$read = FileRead("pref.cfg")
$ligne = StringRegExp($read, $profil & ".+", 3)
MsgBox(0,"",$ligne[0])
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 20:52
par Tlem
Difficile de répondre, puisque nous n'avons pas connaissance de la valeur de
$profil.

Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:00
par Nilak
@BloodWolf: ligne[0] renvoie rien... :/
@Tlem: $profil contient du texte.
Lena|PDG|009|
Nicolas|Chocolatier|699|
Maurice|Fleuriste|599|
Dingo|Potier|888|
C'est un exemple, $profil va contenir, Lena ou Nicolas ou Maurice... Ce que je veux récupérer c'est le PDG 009.
Ensuite je récupère le contenu du $readline et j'utilise un stringsplit sur le |... Ça marche pour Lena, mais pas les autres... :/
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:03
par bloodwolff
Tu es sur ? je viens de tester et sa fonctionne impec
Code : Tout sélectionner
$profil = 'Maurice'
$read = 'Lena|PDG|009|' & @crlf _
& 'Nicolas|Chocolatier|699|' & @crlf _
& 'Maurice|Fleuriste|599|' & @crlf _
& 'Dingo|Potier|888|'
$ligne = StringRegExp($read, $profil & ".+", 3)
MsgBox(0,"",$ligne[0])
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:14
par matwachich
Code : Tout sélectionner
$hF = FileOpen("pref.cfg", 0)
Dim $i = 1, $result = 0
While 1
$ligne = FileReadLine($hF, $i)
If @error = -1 Then ExitLoop
If StringInStr($ligne, $profile) Then
$result = $ligne
ExitLoop
EndIf
WEnd
FileClose($hF)
ConsoleWrite($result & @CRLF)
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:16
par Nilak
Rhalalala... Je me sens boulet... En effet ça fonctionne, désolé! Mon stringsplit etait mauvais quand je t'ai dit non!
Merci bien :d
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:22
par bloodwolff
Passe le Post en Résolu alors ! [R]
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:25
par Nilak
si ça ne derange pas, je ferai ça demain, car j'aurai bien aimé savoir pourquoi la boucle ne fonctionne que sur le premier et pas sur les autres, c'est étrange non?
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:27
par Tlem
@Nilak
Je n'en demandais pas tant. Je voulais juste ouvrir votre esprit sur un élément à coté duquel vous seriez passé.
Par exemple :
Code : Tout sélectionner
; Fichier pref.cfg
;Profil1| Valeur 1 | Valeur 2 | Valeur N... ligne1
;Profil2| Valeur 1 | Valeur 2 | Valeur N... ligne2
;ProfilN...
$profil = "2"
$L = 1
Do
$readline = FileReadLine("pref.cfg", $L)
MsgBox(0, "", $readline)
MsgBox(0, "", $profil)
$presence = StringInStr($readline, $profil)
MsgBox(0, "", $presence & @error)
$L = $L + 1
Until $presence = 1
Ne dépassera jamais la ligne 1.

Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:36
par Nilak
Comment ça? Pourtant si j'affiche le resultat de $readline, il affiche bien les lignes suivantes...

Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:47
par Tlem
Je ne comprend pas votre problème, car si j'utilise votre code il fonctionne normalement.
Code : Tout sélectionner
;Lena|PDG|009|
;Nicolas|Chocolatier|699|
;Maurice|Fleuriste|599|
;Dingo|Potier|888|
$profil = "Maurice"
$L = 1
Do
$readline = FileReadLine("pref.cfg", $L)
$presence = StringInStr($readline, $profil)
MsgBox(0, "Texte recherché = " & $profil, "$readline = " & $readline & @CRLF & _
"$presence = " & $presence & @CRLF & "@error = " & @error)
$L = $L + 1
Until $presence = 1
Je l'ai simplement adapté pour l'affichage, mais le code original fonction correctement.
Sinon, si le but est de récupérer la dernière valeur du profil, ceci pourait être sympa :
Code : Tout sélectionner
$profil = "Maurice"
$L = 1
Do
$readline = FileReadLine("pref.cfg", $L)
$aProfile = StringSplit($readline, "|")
If StringInStr($aProfile[1], $profil) Then
MsgBox(0, 'Valeur recherchée', $aProfile[3])
ExitLoop
EndIf
$L += 1
Until $L = $aProfile[0]
Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 21:51
par Tlem
Nilak a écrit :Comment ça? Pourtant si j'affiche le resultat de $readline, il affiche bien les lignes suivantes...

Hé bien, tout simplement, la valeur "2" ce trouve dans toutes les lignes, donc :
- il traite la première ligne.
- Trouve la valeur "2"
- Met $presence à 1
- Termine la boucle car $presence = 1

Re: [..] StringInStr dans une boucle DO
Posté : mar. 04 janv. 2011 22:27
par Nilak
En effet... Quand je sors mon code dans un autre fichier ça fonctionne... Mais dans mon fichier .au3, il ne fonctionne plus... La seule différence c'est le:
Code : Tout sélectionner
$profiinput = GUICtrlCreateCombo()
$profil = GUICtrlRead($profiinput)
Ca peut venir du GUICtrlCreateCombo?
Mais quand je l'affiche il me met la bonne valeur...
Sinon pour au dessus, mon premier exemple est mauvais^^". Car je fais toujours une recherche sur le nom de profil qui doit être unique, du coup pas de risque qu'il trouve un résultat positif avant d'arriver à la fin.
Re: [..] StringInStr dans une boucle DO
Posté : mer. 05 janv. 2011 00:03
par Tlem
Nilak a écrit :Ca peut venir du GUICtrlCreateCombo?
Je ne vois que ça (attention aux @LF et @CR), ou une réutilisation de la variable ailleurs dans le code
Nilak a écrit :je fais toujours une recherche sur le nom de profil qui doit être unique, etc ...
C'était juste au cas ou.

Re: [..] StringInStr dans une boucle DO
Posté : mer. 05 janv. 2011 20:39
par Nilak
Voila je viens de rentrer et j'ai direct planché sur cette histoire de combo. Le code fonctionne avec:
Code : Tout sélectionner
$profilnontraite = GUICtrlRead($profiinput)
$profil = StringStripWS($profilnontraite,1)
Merci à tous.
