Importer valeurs depuis un fichier texte dans des variables VBS

Importer valeurs depuis un fichier texte dans des variables VBS - VB/VBA/VBS - Programmation

Marsh Posté le 17-01-2015 à 23:01:16    

Bonjour,
 
Je m'inscrit ici pour quémander de l'aide, ça fait plus de 4 heures que j'écume Internet pour trouver une solution à un problème qui me semblait pourtant simple. :pfff:  
 
j'ai fait un script VBS qui permet à son utilisateur de sauvegarder ses variables, en les exportant dans un fichier texte à son nom. Cela fonctionne bien.
Si les variables de mon script ont pour valeur (Pour l'utilisateur Toto):
 
Variable1 = "blabla"
Variable2 = 1
Variable3 = 0
Variable4 = 4
 
J'obtiens donc un fichier texte Toto.txt contenant:
 
Status1 = "blabla"
Status2 = 1
Status3 = 0
Status4 = 4
 
Maintenant le problème c'est que quand l'utilisateur Toto reviens, je veux qu'il puisse charger sa sauvegarde, ré-atribuant ces valeurs "Status" aux Variable d'origine.
 
J'ai essayé d'abord ceci:
___________________________________________________________________

Code :
  1. Function LoadSave
  2. val = 0
  3. Do Until val = 1
  4. savefile = InputBox("Save Name: ", "Load Save" )
  5. If IsEmpty(savefile) Then
  6.   val = 1
  7.   Call MainMenu
  8.   exit Function
  9. ElseIf Len(savefile) = 0 Then
  10.   val = 0
  11.   MsgBox "Save Not Found",48,"Error" 
  12. End If
  13. If Not fso.FileExists("C:\Script\Saves\" & savefile & ".txt" ) Then
  14.   MsgBox "Save Not Found",48,"Error"
  15. Else
  16.   Set rea = fso.OpenTextFile("C:\Script\Saves\" & savefile & ".txt",1)
  17.   val = 1
  18. While Not rea.AtEndOfStream
  19. rea.readline
  20. Variable1 = Status1
  21. Variable2 = Status2
  22. Variable3 = Status3
  23. Variable4 = Status4
  24. Wend         
  25. End If   
  26. Loop
  27. End Function

 
_____________________________________________________________________
 
Cela n'a pas fonctionné. Les variables sont nulles. Je peux importer une variable depuis un fichier texte, mais plusieurs non. Je n'ai pas envie d'avoir besoin de 4 fichiers .txt pour sauvegarder 4 variables! (surtout que 4 c'est pour l'exemple, en fait il y en a potentiellement beaucoup plus.
J'ai essayé plusieurs variantes avec une boucle For, sans succès. J'ai ensuite perdu un temps fou à essayer de comprendre les fonction put et get, mais j'ai laissé tomber (ça doit être trop tôt pour moi, je suis encore novice en VBS).
 
Finalement, j'ai décidé de sauvegarder les valeurs sous une forme adaptable en tableau dans Toto.txt:
 
"blabla", 1, 0, 4
 
Puis je tente d'en faire un tableau dans mon script:
 
import=rea.readAll  
  SVD = Array(import)            
 
Si je fais une MsgBox sur la variable import, il m'affiche bien: "blabla", 1, 0, 4. Donc
 
Pourtant, SVD produit invariablement l'erreur "indice en dehors de la plage ' number 1 ' ".
 
Aidez moi SVP!!!  :cry:


Message édité par Vyselegend le 18-01-2015 à 21:15:42
Reply

Marsh Posté le 17-01-2015 à 23:01:16   

Reply

Marsh Posté le 18-01-2015 à 20:06:15    

 
           Bonjour, bonjour !
 
           Merci de respecter les règles du forum en balisant le code, cela incitera un peu plus d'éventuels intervenants à répondre !
 
           Que de confusions ‼  Un fichier texte est composé de lignes de texte, pas de variables !
           Status1 = "blabla" : Status1 n'est pas une variable, juste du texte comme blabla
 
           Dans la fonction, Variable1 = Status1 se traduit littéralement par la variable Variable1 devient égale à la variable Status1 !
           Aucun rapport avec le fichier texte …
 
           Sauvegarder par exemple uniquement les valeurs des variables puis
           lire en une instruction l'intégralité du fichier texte (ReadAll) puis séparer les valeurs via la fonction Split dans une variable tableau …
 
           _____________
           Je suis Charlie
 

Reply

Marsh Posté le 18-01-2015 à 21:09:48    

Bonjour Marc,

 

Merci de me répondre. Désolé de ne pas avoir été suffisament scrupuleux dans la rédaction de ma demande (après plus de 4 heures de prise de tête je tends à perdre certaines de mes capacités mentales...  )

 

J'ai conscience que le texte enregistré n'est que du texte, et c'est précisément ma difficulté.

 
Citation :

Sauvegarder par exemple uniquement les valeurs des variables puis
           lire en une instruction l'intégralité du fichier texte (ReadAll) puis séparer les valeurs via la fonction Split dans une variable tableau …

 

C'est ce que j'essaie de faire. Mais je lutte sur la syntaxe, car je ne veux pas qu'a chaque boucle la variable soit écrasée par la nouvelle chaîne de caractère lue.
Par exemple:

 
Code :
  1. Set rea = fso.OpenTextFile("C:\Script\Saves\" & savefile & ".txt",1)
  2.  
  3.   import=rea.readAll
  4.   spread = Split(import,"," )
  5.   For Each var In Filter(spread, true)


A ce stade comment incrémenter mes variables?  :??:
Est ce que je peux me permettre de faire: var = Array(var) par exemple (à chaque fois que je veux tester une solution je dois re-simuler un chargement de sauvegarde dans mon script, j'en suis à plusieurs centaines SVP aiguillez moi un peu...)
 

Code :
  1. Next
  2.   SVD = Array(import)
  3.    rea.Close

 

 

Encore merci de votre aide.

 

EDIT: J'ai édité mon message d'origine pour le baliser.


Message édité par Vyselegend le 18-01-2015 à 21:16:38
Reply

Marsh Posté le 19-01-2015 à 00:09:35    

Ok, Autant pour moi.  
 
J'ai trouvé, et c'est tout simple. Je me suis perdu dans mon délire et j'étais obsédé par l'idée que je devais changer de nom de variable de façon dynamique au sein ma boucle (ce qui a l'air chaud , voir impossible). En fait il suffit de poser les conditions de façon classique:
 

Code :
  1. Set rea = fso.OpenTextFile("C:\Script\Saves\" & savefile & ".txt",1)
  2.   j = -1 
  3.   import=rea.readAll
  4.   spread = Split(import,"," )         
  5.   For Each var In Filter(spread, " ", true)
  6.   j=j+1
  7.   If j = 0 Then
  8.     Variable1 = var
  9.   ElseIf j = 1 Then
  10.     Variable2 = var 
  11.   ElseIf j = 2 Then           
  12.    Variable3 = var 
  13.   ElseIf j = 3 Then 
  14.    Variable4 = var 
  15.  
  16.   End If
  17.   Next
  18.    
  19.     rea.Close


 
Comme quoi, quand on s'entête sur un problème, on perd en lucidité et on deviens obtus. Un peu de repos et un bon café, et ça rentre dans l'ordre.

Reply

Marsh Posté le 19-01-2015 à 09:21:23    

 
           Les lignes n°7 à 21 sont inutiles !
 
           La variable tableau spread suffisant à elle seule, spread(0) contenant la première valeur …
 
           ________________________________________________________________________
           Tous unis, tous Charlie
 

Reply

Marsh Posté le 19-01-2015 à 19:30:09    

La fonction Split génère un tableau! Super!  :bounce:  
 
Merci beaucoup Marc L, grâce à vous j'ai appris quelque chose, et mon script est allégé d'une bonne dizaine de lignes.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed