Variable "indirecte" [Résolu]

Signaler
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
-
Messages postés
65
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
5 juin 2012
-
Bonsoir tout le monde,

Ca y'est j'ai trouvé comment formuler mon problème.
Voilà : j'ai par exemple une variable strChemin as string.
Je lit dans un fichier externe une chaine de caractaire "strChemin=une chaine de caractère"
En lisant cette ligne, je voudrais affecter automatiquement le texte "une chaine de caractère" dans ma variable strChemin.
Le but du jeu est de faire ça sans forcement savoir que dans le fichier texte strChemin est mentionnée... donc pas de instr, mid... car je voudrais globaliser tout ça pour 57 variables...

Je suis sure qu'il y a une solution...
Merci d'avance.

Fiko ;-)

13 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
" et la relecture, beh on boucle jusqu'à ce que la gauche soit la string recherchée (valant alors pour variable)."



toi tu regardes dans une simple variable multi-col vide si ...... si rien, çà n'a aucun sens.



voici un exemple en VB6




Option Explicit

'

Private Type ExterVar

NomVar As String

Valeur As Long

End Type

'

Dim Mytab(1 To 57) As ExterVar

'

'

Private Sub Form_Load()

' init un peu..

Mytab(1).NomVar = "Coucou"

Mytab(1).Valeur = 70



Mytab(2).NomVar = "strTest"

Mytab(2).Valeur = 40



Mytab(5).NomVar = "Machin"

Mytab(5).Valeur = 187

End Sub

Private Sub Form_Unload(Cancel As Integer)

Erase Mytab

End Sub

'

'

Private Sub Command1_Click()

Call TestVar

End Sub

'

'

Private Sub TestVar()

' on veux récupérer le long pour "strTest"

Const sSearch As String = "strTest"

Dim i As Integer

'

For i = 1 To 57

If Mytab(i).NomVar = sSearch Then Exit For

Next i



' on a quitté trop tard, donc non trouvé

If i = 58 Then

MsgBox "Fausse variable non-trouvée"

Else

' trouvé, on a l'indice

MsgBox "La variable cherchée est '" & sSearch & "'" & vbCrLf & _

"Elle est en " & i & "è position du tableau" & vbCrLf & _

"Sa valeur est de '" & CStr(Mytab(i).Valeur) & "'"

End If

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
2 octobre 2016
1
Bonsoir,

Sa reste quand meme pas tres clair ton probleme :)

http://www.troxsa.info/Code VB.net
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
salut,

voici ce que j'ai compris :





je travaille en Cobol ???

j'ai un fichier de 57lignes contenant "nom_de_la_variable" "=" "valeur_a_affecter"



je vais inventer dynamiquement 57 variables qui vont soudainement et
par magie être renommées par la partie de gauche (avant le "="), et
initialisées avec la partie de droite.

tout çà de surcroît, sans même chercher la position du "=" (pas de mid$, ni instr)



et je n'ai pas de question.





umm, il doit y avoir une sacré erreur d'interprétation de ma part, je l'espère du moins...

++

PCPT [AFCK]
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Salut tout le monde.
Pcpt j'ai compris la meme chose
Dans ce cas les chances d'une erreur d'interprétation s'en sont envollées
Ma réponse sera : il n'est pas possible de créer des variables dynamiquement
Mais peut-etre que je me trompe.....enfin j'ai jamais vu ce genre de code
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
je confirme

VB n'est pas PHP !!!!

si les noms sont importants ou utiles, on créé un tableau.

perso je préfère un tableau de type, sinon un classique bi-dimentionnel.

redimentionné ensuite au nombre de lignes du fichier .txt, la permière
colonne ou le 1er type reçoit la gauche, puis 2 pour droite.

et la relecture, beh on boucle jusqu'à ce que la gauche soit la string recherchée (valant alors pour variable).



++
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu peux, au pire du pire utiliser un dictionnary (Microsoft Scripting Runtime)



ou simplement un tableau de Type (Nom/Valeur)



par contre, j'ai pas saisi ton histoire de "pas de Instr"

tu pourra pas y couper....

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Merci pour votre conviction à vouloir comprendre quelque chose qui n'est pas clair.
A la limite le instr est indispensable effectivement.

Je veux simplement pouvoir détecter si dans mon fichier texte j'ai une variable qui est déclaré à mon application (je peux éventuellemnt envisager de mettre une marque devant ma variable pour détécter si il faut en réaliser l'affectation : exemple
"#strChemin=une chaine de caractère" ici le # me permettra de détecter qu'un variable est à effecter et ensuite je veux faire automatiquement l'affectation la variable après le # de sa valeur après le égale...

J'avoue que c'est pas encore bien claire mais je compte sur vous pour m'éclairer

Fiko ;-)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
tu ne peux pas récupérer le nom d'une variable.



dim i as long, tu peux avoir son contenu, savoir si elle n'est pas initialisée, son type, mais pas "i".

2e fois : soit un tableau bi-dimentionnel, soit un tableau de type pour stoquer une string qui servira de référence



donc MonTab(0,0) = "i"

MonTab(0,1) = 3



ou MonTab(0).tLib = "i"

MonTab(0).tVal = 3
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
En fait je viens de voir qu'il y a une fonction pseudo-equivalente dans Excel : c'est "INDIRECT". Elle permet de pointer sur une celulle en fonction du calcul réalisée dans "INDIRECT"...

En fait je voudrais pointer sur une variable de mon code en fonction de la valeur d'une autre variable par exemple :
J'ai essayé ça mais ça ne marche pas :

Private Type ExterVar
NomVar As String
Valeur As Long
End Type


Private Sub TestVar()
Dim Mytab As ExterVar
Dim strTest As String

strTest = "NomVar"
Mytab.(strTest) = "test" '--> ça marche pas

End Sub

Tant pis... Merci encore pour votre aide.

Fiko ;-)
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
L'idée est très bonne mais ceci nécessite de renseigner toutes mes variables dans un tableau.
Je trouve pas très parlant dans un code d'utiliser un tableau unique qui regroupe toute mes variables.
Je prefert appeler strTest dans une ligne de code que Mytab(2).NomVar... surtout qu'en il y en a 57...
D'autre part, mon idée était de pouvoir exploiter ce code pour toute les variables de mon appli

Mais j'ai bien l'impression que ce que je veux faire est irréalisable...
En tout merci à tous. Ce forum est super !!!

Fiko ;-)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
c'est un petit peu ce qu'on te dit depuis le début. VB n'est pas PHP !!!


et ce n'est pas "toutes tes variables" mais "tout ton fichier texte" dont la conception est plus qu'étrange....
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Ok merci ... Sacré combat... |o|
J'adopte la solution de PCPT (Admin CS)

Fiko ;-)
Messages postés
65
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
5 juin 2012

Bonjour à tous,
Pourtant je suis peut-être stupide à lier, mais je n'ai pas compris comme vous.
On dirait que le fichier externe possède comme des lignes de code VB
genre dans le fichier texte il y a écrit :
String1 =  "Bonjour"
String2 = "Coucou"
Dans le code du programme il y a :

Sub m ()
Dim String1, String2 as String
...
End sub
Et fiko81 cherchait à donner (une seule fois, pas dynamiquement) "Bonjour" et "Coucou" auxdites String.

En effet on ne peut pas avoir le nom d'une variable (la mettre dans Une String)
Tu peux toujours créer un Array MesStrings(57,1) as string
ensuite : Messtrings(0,0) = "String1"
MesStrings(1,0) = "String2" und so weiter jusqu'à 57...
et après un module (lent) qui cherche dans ton fichier externe chacunes des valeurs.
une fois la bonne ligne trouvée : MesStrings(i,1) Mid(ligne, Len(Messtrings(i,0) + 3) 'le 3 représente les caractères " " dans ton fichier texte
Enfin voilà c'est compliqué et je ne suis meme pas sur d'avoir compris...

Comme quoi, vraiment rien n'est impossible...