[R] Filewrite qui n'écrit pas la variable correctement

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
CRsyli
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 09 déc. 2014 12:28
Status : Hors ligne

[R] Filewrite qui n'écrit pas la variable correctement

#1

Message par CRsyli »

Bonjour à tous,

Je me permets de mettre ma question sur ce forum car je tourne un peu en rond et je n'ai pas trouvé ma réponse sur le net (peut-être aussi que ma recherche est infructueuse par ma méconnaissance de certains termes...)

Le principe de mon script est de simplifier l'archivage de bande LTO, avec differentes cases à cocher ou à remplir qui remplissent une ligne de commande qui est envoyé à la fin sur putty.
Dans le cas ici, mon problème est que lorsque je clique sur mon bouton "ajouter lecteur", il ne modifie pas correctement le fichier txt. La seule chose qu'il fait est de rajouter un "0" à la fin du texte et non pas faire le remplacement de mot clé par la variable demandée.

J'espère avoir été clair ! Je suis sur que quelqu'un saura m'éclairer pour me dépatouiller de ce problème et probablement certains y verront très certainement les bétises que j'ai pu faire dans mon script :)


Merci à vous !

PS : J'ai volontairement retiré les autres termes qui suivent mon script car ils ne sont pas terminés, et aussi parce qu'ils ne sont qu'une répetition modifiée des "cases".

Code : Tout sélectionner


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <FileConstants.au3>


$Form1 = GUICreate("Simple LTO Launcher", 350, 600, 192, 124)

$Label1 = GUICtrlCreateLabel("1. Choississez le lecteur à utiliser", 10, 10)
$drive = GUICtrlCreateList("", 10, 40, 90, 43)
GUICtrlSetData(-1, "Lecteur 1 (nst0)|Lecteur 2 (nst1)")
$adddrive = GUICtrlCreateButton("Ajouter Lecteur", 230, 50, 100, 20)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $adddrive
            $selected = GUICtrlRead($drive)
            Switch $selected
                Case "Lecteur 1 (nst0)"
                    $tempfile = FileOpen("C:\***\***\***\autoit.txt", 1)
                    $txt = FileRead($tempfile)
                    $checkcommand = StringReplace($txt,"nom_du_lecteur","nst0")
                    FileWrite ("C:\***\***\***\autoit.txt", GUICtrlRead($checkcommand))
                    FileClose($tempfile)

            EndSwitch
EndSwitch
Wend
 
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#2

Message par Y01 »

Bonjour,

Ton GUICtrlRead m'a l'air bizarre

Essaie avec ça :

Code : Tout sélectionner

GUICtrlRead ($drive, 1)
PS : Je pense qu'un spoiler est nécessaire autour de ton code.

EDIT : Je viens de voir ton FileWrite, il ne faut pas mettre le GUICtrlRead dedans mais une variable déjà lue par le GUICtrlRead.

Essaie ça aussi :
► Afficher le texte
Modifié en dernier par Y01 le mar. 09 déc. 2014 15:47, modifié 2 fois.
Y01
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#3

Message par DimVar »

Bonjour,


NOK = FileWrite ("C:\***\***\***\autoit.txt", GUICtrlRead($checkcommand))


Cdlt.


[EDIT] Grillé...
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
CRsyli
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 09 déc. 2014 12:28
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#4

Message par CRsyli »

Merci pour vos réponses

J'ai essayé les modifications mais j'ai toujours le même problème...

Code : Tout sélectionner

Case $adddrive
            $selected = GUICtrlRead($drive,1)
            Switch $selected
                Case "Lecteur 1 (nst0)"
                    $tempfile = FileOpen("C:\***\***\***\autoit.txt", 1)
                    $txt = FileRead($tempfile)
                    $checkcommand = StringReplace($txt,"nom_du_lecteur","nst0")
                    $checkresult = GUICtrlRead($checkcommand, 1)
                    FileWrite ($tempfile, $checkresult)
                    FileClose($tempfile)
 
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#5

Message par DimVar »

Je pense que vous n'avez pas compris...
Guictrlread demande un ID et non le retour de StringReplace.
Lisez la doc de GuiCtrlRead.

Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
CRsyli
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 09 déc. 2014 12:28
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#6

Message par CRsyli »

DimVar a écrit :Je pense que vous n'avez pas compris...
Guictrlread demande un ID et non le retour de StringReplace.
Lisez la doc de GuiCtrlRead.

Cdlt.
Je vais voir ça de ce pas !
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#7

Message par Y01 »

DimVar a écrit :Je pense que vous n'avez pas compris...
Guictrlread demande un ID et non le retour de StringReplace.
Lisez la doc de GuiCtrlRead.

Cdlt.
Pour le coup, je ne comprends pas quelque chose.

La doc indique :

GUICtrlRead
Read state or data of a control.

Je me trompe peut être mais "data" c'est bien les "données" donc le résultat d'une autre commande par exemple non ?
Y01
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#8

Message par DimVar »

Oui, les data d'un Control et non d'un stringreplace :D
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#9

Message par Y01 »

Hum, j'ai cru (à tord apparemment) que le StringReplace était un RegExpClass

Toujours selon la doc :

REGEXPCLASS - Control classname using a regular expression

Par défaut, j'ai pris pour habitude de remplacer mon texte avec des expressions régulières d'où sans doute mon erreur.
Y01
CRsyli
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 09 déc. 2014 12:28
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#10

Message par CRsyli »

J'ai un peu lu la doc au sujet de GuiCtrlRead et pour le moment j'avoue ne pas trop comprendre cette histoire de Control ID.
Toujours est-il que j'ai testé en faisant

Code : Tout sélectionner

$checkresult = GUICtrlRead($drive, 1)
et pour le coup je récupère bien l'info contenu dans la liste, ce qui est somme toute normal...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#11

Message par jguinch »

Le problème a l'air de se situer au niveau de l'ouverture du fichier, non ?
Je vois que tu ouvres le fichier en mode 1 : pourquoi ? tu veux ajouter au bout ou remplacer ?
Si tu veux remplacer tu texte, il faut d'abord ouvrir le fichier en lecture pour lire son contenu, le fermer, pour l'ouvrir en mode 2 pour tout ré-écrire :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#12

Message par mikell »

Code : Tout sélectionner

FileWrite($hFile, $newTxt)
:mrgreen:
" 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
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#13

Message par DimVar »

CRsyli a écrit :J'ai un peu lu la doc au sujet de GuiCtrlRead et pour le moment j'avoue ne pas trop comprendre cette histoire de Control ID.
Toujours est-il que j'ai testé en faisant

Code : Tout sélectionner

$checkresult = GUICtrlRead($drive, 1)
et pour le coup je récupère bien l'info contenu dans la liste, ce qui est somme toute normal...
GuiCtrlRead, recupere l'etat ou les données d'un Control.
Dans la documentation de cette fonction, aprés le return Value, vous trouvez le tableau qui liste les types de Control que GuiCtrlRead peut recuperer.
C'est donc apres de la creation d'un GUI et de ses Control, que vous allez pouvoir recuperer leur valeurs.
ControlID est le 1er parametre de la fonction. Il signifie l'identifiacteur du Control.

Ex : Vous creez une GUi, puis avec GUICtrlCreateCheckbox, vous creez une checkbox dans ta GUI. Si tu regarde l'aide de la commande GUICtrlCreateCheckbox, vous verrez que sa Return Value est un ControlID.
Autrement dit, un GUICtrlCreateCheckbox renvoi (en cas de succes) un identifiant de Control, qui peut etre utilisé dans GuiCtrlRead. Vous permettant de connaitre la case cochée par le User sur ta checkBox.
Lors de l'utilisation d'un GuiCtrlRead, vous devez vous assurer que la variable que vous allez mettre en 1er paramètre, contient bien un ControlID.
Ce qui n'etait pas le cas dans ton script (au début du topic).
Est ce plus clair ?

Cdlt. Dimvar.
Modifié en dernier par DimVar le mer. 10 déc. 2014 17:12, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
CRsyli
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 09 déc. 2014 12:28
Status : Hors ligne

Re: [..]Filewrite qui n'écrit pas la variable correctement

#14

Message par CRsyli »

Je crois que c'est bon ! Ca fonctionne !


Merci beaucoup pour la leçon et l'aide que vous m'avez apporter !
Répondre