[R] StringInStr dans une boucle DO

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

[R] StringInStr dans une boucle DO

#1

Message 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!
Modifié en dernier par Nilak le mer. 05 janv. 2011 19:58, modifié 1 fois.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#2

Message par bloodwolff »

Code : Tout sélectionner

Until $presence <> 0
Compte skype : bloodwolfff
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#3

Message par Nilak »

Fonctionne toujours aussi bizarrement!
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#4

Message par bloodwolff »

Et sa ?

Code : Tout sélectionner

$read = FileRead("pref.cfg")
$ligne = StringRegExp($read, $profil & ".+", 3)
MsgBox(0,"",$ligne[0])
Compte skype : bloodwolfff
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#5

Message par Tlem »

Difficile de répondre, puisque nous n'avons pas connaissance de la valeur de $profil. :roll:
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é".
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#6

Message 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... :/
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#7

Message 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])
Compte skype : bloodwolfff
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#8

Message 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)
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#9

Message 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
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#10

Message par bloodwolff »

Passe le Post en Résolu alors ! [R]
Compte skype : bloodwolfff
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#11

Message 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?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#12

Message par Tlem »

@Nilak

Je n'en demandais pas tant. Je voulais juste ouvrir votre esprit sur un élément à coté duquel vous seriez passé. :roll:

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. :roll:
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é".
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#13

Message par Nilak »

Comment ça? Pourtant si j'affiche le resultat de $readline, il affiche bien les lignes suivantes... :shock:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#14

Message par Tlem »

Je ne comprend pas votre problème, car si j'utilise votre code il fonctionne normalement. :shock:

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. :roll:

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]
 
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
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#15

Message par Tlem »

Nilak a écrit :Comment ça? Pourtant si j'affiche le resultat de $readline, il affiche bien les lignes suivantes... :shock:
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

8) :roll:
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é".
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#16

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#17

Message 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. ;)
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é".
Nilak
Niveau 4
Niveau 4
Messages : 57
Enregistré le : mar. 25 mai 2010 21:29
Status : Hors ligne

Re: [..] StringInStr dans une boucle DO

#18

Message 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. :D
Répondre