Bonjour,"Michel_D" a écrit dans le message
de news:%Bonjour,"Youri Ligotmi" a écrit dans le message de
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 ---
Bonjour,
"Michel_D" <Michel.NOSPAM@orange-ft.com.invalid> a écrit dans le message
de news:%23ANB6GCtIHA.4076@TK2MSFTNGP06.phx.gbl...
Bonjour,
"Youri Ligotmi" <yl@free.fr.invalid> a écrit dans le message de
news:4826bf67$0$30943$426a34cc@news.free.fr...
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 ---
Bonjour,"Michel_D" a écrit dans le message
de news:%Bonjour,"Youri Ligotmi" a écrit dans le message de
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 ---
Bonjour,"Michel_D" a écrit dans le
message de news:%Bonjour,"Youri Ligotmi" a écrit dans le message de
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 ---
Bonjour,
"Michel_D" <Michel.NOSPAM@orange-ft.com.invalid> a écrit dans le
message de news:%23ANB6GCtIHA.4076@TK2MSFTNGP06.phx.gbl...
Bonjour,
"Youri Ligotmi" <yl@free.fr.invalid> a écrit dans le message de
news:4826bf67$0$30943$426a34cc@news.free.fr...
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 ---
Bonjour,"Michel_D" a écrit dans le
message de news:%Bonjour,"Youri Ligotmi" a écrit dans le message de
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 ---
Jérome : Les chemins ne sont plus encadrés par des guillemets dans le
fichier de configuration et il y a un affichage de la progression du
traitement ;-)
[...]
Jérome : Les chemins ne sont plus encadrés par des guillemets dans le
fichier de configuration et il y a un affichage de la progression du
traitement ;-)
[...]
Jérome : Les chemins ne sont plus encadrés par des guillemets dans le
fichier de configuration et il y a un affichage de la progression du
traitement ;-)
[...]
Bonjour,"Michel_D" a écrit dans le message
de news:%Bonjour,"Youri Ligotmi" a écrit dans le message de
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 ---
Bonjour,
"Michel_D" <Michel.NOSPAM@orange-ft.com.invalid> a écrit dans le message
de news:%23ANB6GCtIHA.4076@TK2MSFTNGP06.phx.gbl...
Bonjour,
"Youri Ligotmi" <yl@free.fr.invalid> a écrit dans le message de
news:4826bf67$0$30943$426a34cc@news.free.fr...
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 ---
Bonjour,"Michel_D" a écrit dans le message
de news:%Bonjour,"Youri Ligotmi" a écrit dans le message de
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 ---
"Youri Ligotmi" a écrit dans le message de
news:482acb00$0$17508$
|| Bonjour,
||
||| "Michel_D" a écrit dans le
||| message de news:%
|||| Bonjour,
||||
|||||| "Youri Ligotmi" a écrit dans le message de
|||||| 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 ---
|
| Tout comptes faits je suis revenu au code de jbongran (en sortant le
| code des sub), juste parce que je voulais pouvoir documenter mon ini
| par des lignes de commentaires, ces lignes générant des erreurs dans
| le ReadAll
Il suffit d'utiliser le caractère de commentaire VBScript ;-)
"Youri Ligotmi" <yl@free.fr.invalid> a écrit dans le message de
news:482acb00$0$17508$426a74cc@news.free.fr
|| Bonjour,
||
||| "Michel_D" <Michel.NOSPAM@orange-ft.com.invalid> a écrit dans le
||| message de news:%23ANB6GCtIHA.4076@TK2MSFTNGP06.phx.gbl...
|||| Bonjour,
||||
|||||| "Youri Ligotmi" <yl@free.fr.invalid> a écrit dans le message de
|||||| news:4826bf67$0$30943$426a34cc@news.free.fr...
||||||| 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 ---
|
| Tout comptes faits je suis revenu au code de jbongran (en sortant le
| code des sub), juste parce que je voulais pouvoir documenter mon ini
| par des lignes de commentaires, ces lignes générant des erreurs dans
| le ReadAll
Il suffit d'utiliser le caractère de commentaire VBScript ;-)
"Youri Ligotmi" a écrit dans le message de
news:482acb00$0$17508$
|| Bonjour,
||
||| "Michel_D" a écrit dans le
||| message de news:%
|||| Bonjour,
||||
|||||| "Youri Ligotmi" a écrit dans le message de
|||||| 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 ---
|
| Tout comptes faits je suis revenu au code de jbongran (en sortant le
| code des sub), juste parce que je voulais pouvoir documenter mon ini
| par des lignes de commentaires, ces lignes générant des erreurs dans
| le ReadAll
Il suffit d'utiliser le caractère de commentaire VBScript ;-)