[vbs] Lecture variables dans un .ini

Le
Youri Ligotmi
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins d'accès
(une 15aine). Jusqu'à présent ces chemins sont déclarés en tête de
chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement ces
lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute dans
un fichier ini que tous mes scripts viendraient lire au début de leur
exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai

Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il me
semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles LAURENT [MVP]
Le #6596081
"Youri Ligotmi" news:4826bf67$0$30943$
| Bonjour à tous

Bonjour,

| J'ai une série de scripts vbs qui font référence à des chemins d'accès
| (une 15aine). Jusqu'à présent ces chemins sont déclarés en tête de
| chaque script.
| C'est un peu idiot dans la mesure où je dois répéter inutilement ces
| lignes et surtout il y a un risque d'incohérence.
| Ce que je voudrais c'est déclarer ces chemins une fois pour toute dans
| un fichier ini que tous mes scripts viendraient lire au début de leur
| exécution.
| Le fichier ini serait de la forme
| chemin1 = c:tempessai
| ...
| Avec un split autour du égal je peux ensuite récupérer le nom de la
| variable et son contenu.
| ma question : comment affecter le nom de variable et le contenu? Il me
| semble avoir vu passer un truc du genre varialble execute mais
| impossible a retrouver.
|
| Quelqu'un connait?
|
| Merci d'avance

Execute :
http://msdn.microsoft.com/en-us/library/03t418d2(VS.85).aspx

ExecuteGlobal :
http://msdn.microsoft.com/en-us/library/342311f1(VS.85).aspx

--- PathDef.ini ---
chemin1 = "c:tempessai1"
chemin2 = "c:tempessai2"
--- PathDef.ini ---

--- LoadPathFromIni.vbs ---
Sub LoadPathFromIni (strIniFile)
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFile=oFs.OpenTextFile(strIniFile)
Execute oFile.ReadAll()
End Sub

LoadPathFromIni("D:TestPathDef.ini")
WScript.Echo chemin1
WScript.Echo chemin2
--- LoadPathFromIni.vbs ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
jbongran
Le #6598471
"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins d'accès
(une 15aine). Jusqu'à présent ces chemins sont déclarés en tête de chaque
script.
C'est un peu idiot dans la mesure où je dois répéter inutilement ces
lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute dans un
fichier ini que tous mes scripts viendraient lire au début de leur
exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il me
semble avoir vu passer un truc du genre varialble execute mais impossible
a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir bien
compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")

Youri Ligotmi
Le #6600661
"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins d'accès
(une 15aine). Jusqu'à présent ces chemins sont déclarés en tête de
chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement ces
lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute dans
un fichier ini que tous mes scripts viendraient lire au début de leur
exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il me
semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir
bien compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")


Effectivement ma demande n'était pas très claire, votre réponse, elle,
est parfaite : c'est exactement ce que je recherchais.

Merci


Michel_D
Le #6601061
Bonjour,

"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins
d'accès (une 15aine). Jusqu'à présent ces chemins sont déclarés en
tête de chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement ces
lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute
dans un fichier ini que tous mes scripts viendraient lire au début de
leur exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il
me semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir
bien compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")


Effectivement ma demande n'était pas très claire, votre réponse, elle,
est parfaite : c'est exactement ce que je recherchais.



Moi je serais toi je regarderai la portée des variables ainsi crées
(à cause du Dim) et je suis pas sur que ce soit ce que tu recherche.

La proposition de Gilles n'a pas ce problème ou si tu tiens à tes Dim,
tu crée une chaîne de caractére correspondant au code qui doit être
exécuté et tu l'exécute à l'extérieur de toutes procédures/fonctions.



Youri Ligotmi
Le #6601391
Bonjour,

"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins
d'accès (une 15aine). Jusqu'à présent ces chemins sont déclarés en
tête de chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement ces
lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute
dans un fichier ini que tous mes scripts viendraient lire au début
de leur exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il
me semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir
bien compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")


Effectivement ma demande n'était pas très claire, votre réponse, elle,
est parfaite : c'est exactement ce que je recherchais.



Moi je serais toi je regarderai la portée des variables ainsi crées
(à cause du Dim) et je suis pas sur que ce soit ce que tu recherche.


portée? c'est à dire existence des variables ainsi créées en-dehors du
script? si c'est bien ça : ça ne me gêne pas du tout, je n'ai besoin de
ces variables prises dans un fichier .ini que dans le script où je dois
les affecter.

La proposition de Gilles n'a pas ce problème ou si tu tiens à tes Dim,
tu crée une chaîne de caractére correspondant au code qui doit être
exécuté et tu l'exécute à l'extérieur de toutes procédures/fonctions.


Si j'ai bien compris (car à cette heure le message de Gilles n'apparaît
toujours pas sur le serveur de news de Free) on crée un vbscript
intégrant ces variables dans son code puis on l'exécute.
Technique qui me rappelle des choses que je faisais en bat.
Par contre dans ce cas je me pose la question de la portée des variables
ainsi créées et affectées à l'extérieur de mon script dans mon script.

A+

Phil




Michel_D
Le #6601681
Bonjour,

"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins
d'accès (une 15aine). Jusqu'à présent ces chemins sont déclarés en
tête de chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement
ces lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute
dans un fichier ini que tous mes scripts viendraient lire au début
de leur exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il
me semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir
bien compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")


Effectivement ma demande n'était pas très claire, votre réponse,
elle, est parfaite : c'est exactement ce que je recherchais.



Moi je serais toi je regarderai la portée des variables ainsi crées
(à cause du Dim) et je suis pas sur que ce soit ce que tu recherche.


portée? c'est à dire existence des variables ainsi créées en-dehors du
script? si c'est bien ça : ça ne me gêne pas du tout, je n'ai besoin de
ces variables prises dans un fichier .ini que dans le script où je dois
les affecter.



Non, à cause du Dim les variables ainsi crées sont locales à la
procédure/fonction ou elles sont créées, si tu veux qu'elles aient une
portée globale dans ton script (je cite : Jusqu'à présent ces chemins
sont déclarés en tête de chaque script) il va falloir exécuter le code
injecté à l'extérieur de toute procédure/fonction ou ne pas les déclarer
explicitement (réponse de Gilles).

PS:Je te conseille de faire afficher les valeurs de tes variables à
différent endroit de ton script pour mieux comprendre ce que je cherche
à te dire.


La proposition de Gilles n'a pas ce problème ou si tu tiens à tes Dim,
tu crée une chaîne de caractére correspondant au code qui doit être
exécuté et tu l'exécute à l'extérieur de toutes procédures/fonctions.


Si j'ai bien compris (car à cette heure le message de Gilles n'apparaît
toujours pas sur le serveur de news de Free) on crée un vbscript
intégrant ces variables dans son code puis on l'exécute.
Technique qui me rappelle des choses que je faisais en bat.
Par contre dans ce cas je me pose la question de la portée des variables
ainsi créées et affectées à l'extérieur de mon script dans mon script.


La réponse de Gilles


Execute :
http://msdn.microsoft.com/en-us/library/03t418d2(VS.85).aspx

ExecuteGlobal :
http://msdn.microsoft.com/en-us/library/342311f1(VS.85).aspx

--- PathDef.ini ---
chemin1 = "c:tempessai1"
chemin2 = "c:tempessai2"
--- PathDef.ini ---

--- LoadPathFromIni.vbs ---
Sub LoadPathFromIni (strIniFile)
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFile=oFs.OpenTextFile(strIniFile)
Execute oFile.ReadAll()
End Sub

LoadPathFromIni("D:TestPathDef.ini")
WScript.Echo chemin1
WScript.Echo chemin2
--- LoadPathFromIni.vbs ---





Youri Ligotmi
Le #6611321
Michel_D a écrit le 12/05/2008 15:15:

Si j'ai bien compris (car à cette heure le message de Gilles
n'apparaît toujours pas sur le serveur de news de Free) on crée un
vbscript intégrant ces variables dans son code puis on l'exécute.
Technique qui me rappelle des choses que je faisais en bat.
Par contre dans ce cas je me pose la question de la portée des
variables ainsi créées et affectées à l'extérieur de mon script dans
mon script.


La réponse de Gilles



Je la publie également, des fois que le serveur de free ait le hoquet à
l'envers et puis parce que "Youri Ligotmi", ça me fait hurler de rire en
tant qu'ex-fan des Kinks :-)) (non d'ailleurs, pas "ex")

=============================================== >
"Youri Ligotmi" news:4826bf67$0$30943$
| Bonjour à tous

Bonjour,

| J'ai une série de scripts vbs qui font référence à des chemins d'accès
| (une 15aine). Jusqu'à présent ces chemins sont déclarés en tête de
| chaque script.
| C'est un peu idiot dans la mesure où je dois répéter inutilement ces
| lignes et surtout il y a un risque d'incohérence.
| Ce que je voudrais c'est déclarer ces chemins une fois pour toute dans
| un fichier ini que tous mes scripts viendraient lire au début de leur
| exécution.
| Le fichier ini serait de la forme
| chemin1 = c:tempessai
| ...
| Avec un split autour du égal je peux ensuite récupérer le nom de la
| variable et son contenu.
| ma question : comment affecter le nom de variable et le contenu? Il me
| semble avoir vu passer un truc du genre varialble execute mais
| impossible a retrouver.
|
| Quelqu'un connait?
|
| Merci d'avance

Execute :
http://msdn.microsoft.com/en-us/library/03t418d2(VS.85).aspx

ExecuteGlobal :
http://msdn.microsoft.com/en-us/library/342311f1(VS.85).aspx

--- PathDef.ini ---
chemin1 = "c:tempessai1"
chemin2 = "c:tempessai2"
--- PathDef.ini ---

--- LoadPathFromIni.vbs ---
Sub LoadPathFromIni (strIniFile)
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFile=oFs.OpenTextFile(strIniFile)
Execute oFile.ReadAll()
End Sub

LoadPathFromIni("D:TestPathDef.ini")
WScript.Echo chemin1
WScript.Echo chemin2
--- LoadPathFromIni.vbs ---

-- Gilles LAURENT MVP Windows Server - Admin Frameworks
http://glsft.free.fr


Merci à tous pour votre aide.
Bilan :
la méthode de jbongran fonctionne en collant le code en tête de chacun
de mes scripts sans faire de sub routine.
la méthode de Gilles (Laurent je suppose parce que ce n'est toujours pas
apparu sur le serveur de news de Free) fonctionne telle quelle.
J'ai gardé la méthode de Gilles, parce que c'est la dernière que j'ai
testée (pas trop logique mais bon...).

Mascaret : Enfin quelqu'un qui comprend la référence de mon pseudo, la
plupart m'appellent "attache-moi", je n'ai rien contre Almodovar mais je
préfère les Kinks.



jbongran
Le #6611921
"Michel_D" news:%
Bonjour,

"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins d'accès
(une 15aine). Jusqu'à présent ces chemins sont déclarés en tête de
chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement ces
lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute dans
un fichier ini que tous mes scripts viendraient lire au début de leur
exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il me
semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir
bien compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")


Effectivement ma demande n'était pas très claire, votre réponse, elle,
est parfaite : c'est exactement ce que je recherchais.



Moi je serais toi je regarderai la portée des variables ainsi crées
(à cause du Dim) et je suis pas sur que ce soit ce que tu recherche.

La proposition de Gilles n'a pas ce problème ou si tu tiens à tes Dim,
tu crée une chaîne de caractére correspondant au code qui doit être
exécuté et tu l'exécute à l'extérieur de toutes procédures/fonctions.



Bien vu en ce qui concerne la portée, il suffit de sortir le code des subs
(ce qui était la version d'origine, mais je la trouvait brouillon après
avoir ajouté les lignes pour afficher le résultat) et dans la boucle mettre
à la place de Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1))) les deux
lignes suivantes (non testé pour le deuxième Execute):
Execute("Dim " & Trim(arrtmp(0)))
Execute(Trim(arrtmp(0)) & "=" & Trim(arrtmp(1)))
Le code ici était juste pour montrer la création dynamique de variables,
maintenant on a l'exemple de l'affectation de valeurs aux variables ;-)
Comme il est convenu (en tout cas dans les best practice de MS) d'utiliser
un Option Explicit, si on ne créé pas dynamiquement les variables, soit il
faut déclarer des variables 'génériques' du style strVar1, strVar2 ce qui
rend le code m....dique, soit éditer tous les fichiers qui font appel au
variables du fichier .ini
Avec le code proposé, on peut facilement ajouter dans la boucle un If Not
fso.FileExists(Nom-De-La-Variable) ou préfixer les noms de variables pour
traitement particulier, etc.
Attention, je ne dis pas que le code de Gilles n'est pas bon (manquerait
plus que ça), d'ailleurs j'avais commencé avec un Execute du readAll, mais
l'obligation d'encadrer les chemins entre double guillemets ne me plaisait
pas et je tenais à un affichage en sortie de ce qui se passe, ce que je ne
suis pas arrivé à faire avec l'Execute du readAll, Gilles ? ;-)




Méta-MCI \(MVP\)
Le #6612821
Bonjour !

des fois que le serveur de free ait le hoquet à l'envers


Je confirme. Les serveurs de news de Free suppriment, non seulement le
Spam, mais aussi tout un tas de messages légitimes.
Et, pas que dans ce newsgroups. J'ai pu constater le problème sur une
trentaine d'entre eux.

@-salutations
--
Michel Claveau

Michel_D
Le #6614851
Bonjour,

"Michel_D" de news:%
Bonjour,

"Youri Ligotmi" news:4826bf67$0$30943$
Bonjour à tous

J'ai une série de scripts vbs qui font référence à des chemins
d'accès (une 15aine). Jusqu'à présent ces chemins sont déclarés en
tête de chaque script.
C'est un peu idiot dans la mesure où je dois répéter inutilement
ces lignes et surtout il y a un risque d'incohérence.
Ce que je voudrais c'est déclarer ces chemins une fois pour toute
dans un fichier ini que tous mes scripts viendraient lire au début
de leur exécution.
Le fichier ini serait de la forme
chemin1 = c:tempessai
...
Avec un split autour du égal je peux ensuite récupérer le nom de la
variable et son contenu.
ma question : comment affecter le nom de variable et le contenu? Il
me semble avoir vu passer un truc du genre varialble execute mais
impossible a retrouver.

Quelqu'un connait?

Merci d'avance



Un exemple sous forme de deux subs, mais je ne suis pas sûr d'avoir
bien compris la demande:
# -- Début
Option Explicit

Sub ReadVarsFromFile(IniFile)
Dim i, Fso, objIni, arrtmp
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjIni = Fso.OpenTextFile(IniFile, 1)
Do Until objIni.AtEndOfStream
arrtmp = Split(objIni.ReadLine, "=")
Call MakeDynamicVar(Trim(arrtmp(0)), Trim(arrtmp(1)))
Loop
objIni.Close
Set objIni = Nothing
Set Fso = Nothing
End Sub

Sub MakeDynamicVar(VarName, VarValue)
Dim Nametmp
Nametmp = VarName
Execute("Dim " & VarName)
VarName = VarValue
Wscript.Echo Nametmp & " = " & VarName
End Sub

Call ReadVarsFromFile("D:Scriptspaths.ini")


Effectivement ma demande n'était pas très claire, votre réponse,
elle, est parfaite : c'est exactement ce que je recherchais.



Moi je serais toi je regarderai la portée des variables ainsi crées
(à cause du Dim) et je suis pas sur que ce soit ce que tu recherche.

La proposition de Gilles n'a pas ce problème ou si tu tiens à tes Dim,
tu crée une chaîne de caractére correspondant au code qui doit être
exécuté et tu l'exécute à l'extérieur de toutes procédures/fonctions.



Bien vu en ce qui concerne la portée, il suffit de sortir le code des
subs (ce qui était la version d'origine, mais je la trouvait brouillon
après avoir ajouté les lignes pour afficher le résultat) et dans la
boucle mettre à la place de Call MakeDynamicVar(Trim(arrtmp(0)),
Trim(arrtmp(1))) les deux lignes suivantes (non testé pour le deuxième
Execute):
Execute("Dim " & Trim(arrtmp(0)))
Execute(Trim(arrtmp(0)) & "=" & Trim(arrtmp(1)))
Le code ici était juste pour montrer la création dynamique de variables,
maintenant on a l'exemple de l'affectation de valeurs aux variables ;-)
Comme il est convenu (en tout cas dans les best practice de MS)
d'utiliser un Option Explicit, si on ne créé pas dynamiquement les
variables, soit il faut déclarer des variables 'génériques' du style
strVar1, strVar2 ce qui rend le code m....dique, soit éditer tous les
fichiers qui font appel au variables du fichier .ini
Avec le code proposé, on peut facilement ajouter dans la boucle un If
Not fso.FileExists(Nom-De-La-Variable) ou préfixer les noms de variables
pour traitement particulier, etc.
Attention, je ne dis pas que le code de Gilles n'est pas bon (manquerait
plus que ça), d'ailleurs j'avais commencé avec un Execute du readAll,
mais l'obligation d'encadrer les chemins entre double guillemets ne me
plaisait pas et je tenais à un affichage en sortie de ce qui se passe,
ce que je ne suis pas arrivé à faire avec l'Execute du readAll, Gilles ?
;-)


Sur la base du code de Gilles, je trouve le code suivant plus simple, car
il y a à mon avis aucun intérét à décomposer le contenu du fichier .ini.


--- PathDef.ini ---
Dim chemin1, chemin2
chemin1 = "c:tempessai1"
chemin2 = "c:tempessai2"
--- PathDef.ini ---

--- portion de code à placer en tête de script ---
Dim strIniFile

strIniFile="D:TestPathDef.ini"
Set oFs=CreateObject("Scripting.FileSystemObject")

If oFs.FileExists(strIniFile) Then
Set oFile=oFs.OpenTextFile(strIniFile)
Execute oFile.ReadAll()
Else
Msgbox "Le fichier (.ini) n'a pas été trouvé !!!"
WScript.Quit
End If

Set oFile=Nothing
Set oFs=Nothing ' Si l'on ne s'en sert plus

WScript.Echo chemin1
WScript.Echo chemin2
--- fin de la portion ---





Publicité
Poster une réponse
Anonyme