Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2913 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer valeurs depuis un fichier texte dans des variables VBS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Importer valeurs depuis un fichier texte dans des variables VBS

n°2248663
Vyselegend
Posté le 17-01-2015 à 23:01:16  profilanswer
 

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
mood
Publicité
Posté le 17-01-2015 à 23:01:16  profilanswer
 

n°2248694
Marc L
Posté le 18-01-2015 à 20:06:15  profilanswer
 

 
           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
 

n°2248700
Vyselegend
Posté le 18-01-2015 à 21:09:48  profilanswer
 

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
n°2248711
Vyselegend
Posté le 19-01-2015 à 00:09:35  profilanswer
 

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.

n°2248723
Marc L
Posté le 19-01-2015 à 09:21:23  profilanswer
 

 
           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
 

n°2248771
Vyselegend
Posté le 19-01-2015 à 19:30:09  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer valeurs depuis un fichier texte dans des variables VBS

 

Sujets relatifs
Parser un fichier.txt en PHPParser du code Ada pour colorer et indenter automatiquement le texte !
parser un fichier xmlScript VBS
[RESOLU] [POWERSHELL] Modifier des lignes précises sur un fichier[AJAX] Load d'un fichier XML en ajax
[PHP] Url Rewriting et passage de variables GETSelection de valeurs d'un champ TCD fonctionne sur 2007 mais pas 2010
renomer mon fichier excel a l ouverture par deux cellule[Résolu]Excel 2010 - remplacer chaine de caractère dans un fichier
Plus de sujets relatifs à : Importer valeurs depuis un fichier texte dans des variables VBS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR