Page 1 sur 1
[R] Renvoyer une valeur spécifique d'un fichier .ini
Posté : dim. 28 juil. 2013 21:05
par Pierre123
Bonjour,
J'utilise un code qui me permet de renvoyer un nombre aléatoire (
qui me permet ensuite de lire un fichier au hasard dans une base de données). Ce chiffre aléatoire est saisi dans un fichier .ini pour éviter de retomber dessus lors des utilisations suivantes. Voici le code :
Code : Tout sélectionner
While $c <> 1
$r = String(";"&Random(1,$array[1],1)&";")
If Not StringInStr($str,$r,1) Then
$str = $str&$r
$bla = StringSplit($str,";;",1)
$c = 1
IniWrite("verifie.ini", "section2", "key", $str)
Return $r
EndIf
WEnd
Je me retrouve donc avec un fichier .ini qui ressemble à ça :
Tout fonctionne très bien mais je souhaiterai ajouter une fonction "previous" : c'est à dire avoir un bouton pour revenir en arrière et récupérer le dernier chiffre aléatoire saisi (275), puis le clic suivant le précédent (969), etc. Je n'ai pour l'instant pas trouvé de solution qui puisse me permettre de faire ça. Peut-être ai je mal cherché ou existe il une fonction ou une solution pour y parvenir ?
Merci de votre aide
Re: [..] Renvoyer une valeur spécifique d'un fichier .ini
Posté : dim. 28 juil. 2013 22:12
par Tlem
Une idée comme une autre :
Transformer cette chaine ";52;;867;;461;;229;;303;;969;;275;" en cette chaine "52;867;461;229;303;969;275". Ensuite utilisez
StringSplit() pour en faire un tableau. Enfin, vos boutons "Précédent" et "Suivant" devront simplement décrémenter/incrémenter une valeur ayant repris le nombre d'élément du tableau (élément 0).
Edit : Voici un exemple de code
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
GUICreate("MaGui", 223, 104, -1, -1)
GUICtrlCreateLabel("Valeur :", 10, 20, 116, 31)
GUICtrlSetFont(-1, 18, 800, 4, "Courier New")
Global $LblMyVar = GUICtrlCreateLabel("XXX", 135, 20, 52, 35)
GUICtrlSetFont(-1, 20, 800, 0, "Courier New")
Global $Precedent = GUICtrlCreateButton("Précédent", 30, 65, 75, 25)
Global $Suivant = GUICtrlCreateButton("Suivant", 110, 65, 75, 25)
GUISetState(@SW_SHOW)
Local $MyIniVar = ";52;;867;;461;;229;;303;;969;;275;"
; Début du traitement de la chaine récupérée par IniRead() ==> $MyIniVar :
$MyIniVar = StringReplace($MyIniVar, ";;", ";")
; On supprime tout les points virgule qui pourraient être à gauche
While StringLeft($MyIniVar, 1) = ";"
$MyIniVar = StringTrimLeft($MyIniVar, 1)
WEnd
; On supprime tout les points virgule qui pourraient être à droite
While StringRight($MyIniVar, 1) = ";"
$MyIniVar = StringTrimRight($MyIniVar, 1)
WEnd
Local $aMyIniVar = StringSplit($MyIniVar, ";") ; Mise en tableau
Local $iMyIniVar = $aMyIniVar[0] ; Variable tampon
GUICtrlSetData($LblMyVar, $aMyIniVar[$iMyIniVar]) ; Affichage de la dernière valeur
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Precedent
; Tant qu'on est au dessus de la valeur Min, on décrémente
If $iMyIniVar > 1 Then
$iMyIniVar -= 1
GUICtrlSetData($LblMyVar, $aMyIniVar[$iMyIniVar])
EndIf
Case $Suivant
; Tant qu'on est en dessous de la valeur Max, on incrémente
If $iMyIniVar < $aMyIniVar[0] Then
$iMyIniVar += 1
GUICtrlSetData($LblMyVar, $aMyIniVar[$iMyIniVar])
EndIf
EndSwitch
WEnd
Re: [..] Renvoyer une valeur spécifique d'un fichier .ini
Posté : lun. 29 juil. 2013 13:14
par Pierre123
Merci Tlem,
C'est exactement ce que je cherche à faire. Il me reste plus qu'à essayer d'intégrer le bouton "lecture" et pour l'instant je n'ai pas réussi à faire fonctionner le tout correctement mais ça ne saurait tarder !
Sinon, les deux virgules (qui ne me dérangeait pas jusque là !), est ce dû à un mauvais codage de ma part ?
Re: [..] Renvoyer une valeur spécifique d'un fichier .ini
Posté : lun. 29 juil. 2013 13:53
par Tlem
Les deux virgules sont dues à cette partie de votre code :
Code : Tout sélectionner
$bla = StringSplit($str,"[b][color=#FF0000];;[/color][/b]",1)
Re: [..] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mar. 30 juil. 2013 01:22
par mikell
Tsss les 2 virgules sont posées à l'écriture
Code : Tout sélectionner
$r = String([color=#FF0000]";"[/color]&Random(1,$array[1],1)&[color=#FF0000]";"[/color])
...
$str = $str & $r
et après ben faut faire avec ^^
Re: [..] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mar. 30 juil. 2013 03:46
par Pierre123
les deux virgules ne viennent pas de ce bout de code en fait
mais bien de ma fonction random (honte à moi^^), j'ai donc modifié comme ceci
ça me permet d'éviter ces quelques lignes supplémentaires
Code : Tout sélectionner
; Début du traitement de la chaine récupérée par IniRead() ==> $MyIniVar :
$MyIniVar = StringReplace($MyIniVar, ";;", ";")
; On supprime tout les points virgule qui pourraient être à gauche
While StringLeft($MyIniVar, 1) = ";"
$MyIniVar = StringTrimLeft($MyIniVar, 1)
WEnd
; On supprime tout les points virgule qui pourraient être à droite
While StringRight($MyIniVar, 1) = ";"
$MyIniVar = StringTrimRight($MyIniVar, 1)
WEnd
A présent tout fonctionne comme souhaité !
Merci Tlem et mikell !
Re: [..] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mar. 30 juil. 2013 08:45
par Tlem
Pierre123 a écrit :les deux virgules ne viennent pas de ce bout de code en fait
Exact. J'ai été trop vite dans la lecture et rédaction de ma réponse, mais vous avez bien interprété et corrigé ma bourde et c'est l'essentiel.
Ceci-dit, il vous restera toujours le point-virgule de gauche. ^^
Donc cette ligne reste indispensable :
Bonne journée.
Re: [R] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mar. 30 juil. 2013 11:15
par Pierre123
Ceci-dit, il vous restera toujours le point-virgule de gauche. ^^
Donc cette ligne reste indispensable :
Pour info, je ne l'ai pas mise et ça fonctionne quand même^^
Re: [R] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mar. 30 juil. 2013 23:06
par Tlem
Oui, ça fonctionne, mais vous vous retrouvez avec une valeur nulle (celle de l'élément 1 à cause du StringSplit() ). ^^
Donc si vous faites "Précédent" jusqu'au bout, vous aurez l'affichage d'une valeur vide !!!
Re: [R] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mer. 31 juil. 2013 10:18
par mikell
Tlem a raison, oui ça fonctionne mais c'est pas top
D'ailleurs le souci peut aussi être géré de cette façon
Code : Tout sélectionner
Case $Precedent
If $iMyIniVar > [color=#FF0000]2[/color] Then
Re: [R] Renvoyer une valeur spécifique d'un fichier .ini
Posté : mer. 31 juil. 2013 22:31
par Pierre123
Oui effectivement, cela peut poser soucis si je remonte jusqu'au premier élément je suis tout à fait d'accord. Je rajouterai donc une petite ligne de code.
Merci encore de vos réponses.