OVH Cloud OVH Cloud

VBScript: lecture .ini

10 réponses
Avatar
Mikel83
Bonjour à tous!

Ne voulant pas réinventer la roue, il doit bien exister un bout de code
VBScript permettant de lire une valeur dans une section d'un fichier .ini ???
Merci d'avance pour vos suggestions...
--
Cordialement, Mikel

10 réponses

Avatar
DJ
Mikel83 wrote:
Bonjour à tous!

Ne voulant pas réinventer la roue, il doit bien exister un bout de
code VBScript permettant de lire une valeur dans une section d'un
fichier .ini ??? Merci d'avance pour vos suggestions...


bonjour,
il me semble de memoire que cela fut plusieurs fois traité !
un petit tour chez google ?

DJ

Avatar
Mikel83
Merci pour ta réponse! C'est bien ce que j'ai fait avant de poster....
recherche sur ce newsgroup --> rien trouvé
recherche sur google: --> les exemples trouvés se basent sur
"GetPrivateProfileString" qui apparemment, ne fonctionne pas en VBSript

?????
--
Cordialement, Mikel



Mikel83 wrote:
Bonjour à tous!

Ne voulant pas réinventer la roue, il doit bien exister un bout de
code VBScript permettant de lire une valeur dans une section d'un
fichier .ini ??? Merci d'avance pour vos suggestions...


bonjour,
il me semble de memoire que cela fut plusieurs fois traité !
un petit tour chez google ?

DJ






Avatar
DJ
Mikel83 wrote:
Merci pour ta réponse! C'est bien ce que j'ai fait avant de poster....
recherche sur ce newsgroup --> rien trouvé
recherche sur google: --> les exemples trouvés se basent sur
"GetPrivateProfileString" qui apparemment, ne fonctionne pas en
VBSript

?????


HEuuuu, p'tet ben que j'ai dis une connerie, c'etait peut-etre sur le forum
vb.... desolé !

Pour me faire pardonner je te file mes 2 fonctions perso (...DJ)
ecture/ecriture, cadeau de la maison !

Mais ATTENTION , c'est pour des .ini perso dans lesquels la clé voulue est
unique (c'etait mon cas et ca me suffit...)
car je ne gere pas les entetes de rubrique telle qu'on peut les rencontrer
dans des ini MS avec parfois des clés de meme nom dans 2 rubriques
differentes.

En bonus la version ecriture (setparamini) avec gestion des rubriques qui
m'a l'air de bien marcher.
j'ai pas eu le temps de me pencher sur la version lecture.

j'espere que ca t'aidera.

DJ


Function SetParamDJ(ByVal FullPathFicIni, ByVal CleNom, ByVal CleVal)
Rem
***************************************************************************
Rem * Objet : modifie un parametre dans un Fichier .ini maison cle unique
*
Rem *
*
Rem * Entrées: Chemin complet du fichier ini a modifier
*
Rem * Nom de la cle a trouver
*
Rem * Nouvelle Valeur a affecter a la cle
*
Rem *
*
Rem * Retours: resultat de l operation
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, FicNew, NomFicNew, Enr, Rep

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ------------------------------------------(verifie l existance du
fichier ini a modifier
If MyFSO.fileexists(FullPathFicIni) Then
Rem---------------------------------------( recup du Nom complet d
origine sauf le .ini pour faire le .New
NomFicNew = Left(FullPathFicIni, Len(FullPathFicIni) - 4) & ".new"
Rem --------------------------------------( ouverture des fichiers
.ini et .new
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Set FicNew = MyFSO.createtextfile(NomFicNew, True)
Rep = "ERREUR Cle: " + CleNom + " NON Trouvé !!! " ' reponse par
defaut
Rem --------------------------------------( recopie chaque ligne du
ini dans le new
Do
Enr = FicIni.readline
If Left(Enr, Len(CleNom)) = CleNom Then
Rep = "Cle: " + CleNom + " Trouvé Maj OK" 'cle trouvée
modif valeur
Enr = CleNom & "=" & CleVal
End If
FicNew.writeline (Enr)
Loop Until FicIni.atendofstream = True
FicIni.Close
FicNew.Close
Rem --------------------------------------( verifie si nouveau
fichier existe avant kill du .ini !
If MyFSO.fileexists(NomFicNew) Then
MyFSO.deletefile (FullPathFicIni)
Set FicNew = MyFSO.getfile(NomFicNew)
FicNew.Name = MyFSO.GetFileName(FullPathFicIni)
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"

End If
SetParamDJ = Rep
End Function

Function LitParamDJ(ByVal FullPathFicIni, ByVal CleNom)
Rem
***************************************************************************
Rem * Objet : lecture d un parametre dans Fichier .ini maison cle unique
*
Rem *
*
Rem * Entrées: Chemin complet du fichier .ini
*
Rem * Nom de la cle a chercher
*
Rem *
*
Rem * Retours: valeur de la cle ou message d erreur sle ou ini pas trouvé
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, Enr, Fic, Rep

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ---------------------------------(verifie l existance du fichier ini
a Lire
If MyFSO.fileexists(FullPathFicIni) Then
Rem --------------------------------------( ouverture et lecture du
fichier ini
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Rep = "ERREUR - Cle: " + CleNom + " NON Trouvé !!! " 'reponse par
defaut si pas de cle
Do
Enr = FicIni.readline
If Left(Enr, Len(CleNom)) = CleNom Then
Rep = Right(Enr, (Len(Enr) - Len(CleNom)) - 1)
End If
Loop Until FicIni.atendofstream = True
FicIni.Close
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"
End If
LitParamDJ = Rep
End Function

Function SetParamIni(ByVal FullPathFicIni, ByVal SectionNom, ByVal CleNom,
ByVal CleVal)
Rem
***************************************************************************
Rem * Objet : modifie un parametre dans un Fichier .ini standart
*
Rem *
*
Rem * Entrées: Chemin complet du fichier ini a modifier
*
Rem * Nom de la section dans la quelle se trouve la clé sans
crochet *
Rem * Nom de la cle a trouver
*
Rem * Nouvelle Valeur a affecter a la cle
*
Rem *
*
Rem * Retours: resultat de l operation
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, FicNew, NomFicNew, Enr, Rep, blnCleOK, blnSectOK
Dim strDebug

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ------------------------------------------(verifie l existance du
fichier ini a modifier
If MyFSO.fileexists(FullPathFicIni) Then
Rem---------------------------------------( recup du Nom complet d
origine sauf le .ini pour faire le .New
NomFicNew = Left(FullPathFicIni, Len(FullPathFicIni) - 4) & ".new"
Rem --------------------------------------( ouverture des fichiers
.ini et .new
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Set FicNew = MyFSO.createtextfile(NomFicNew, True)
strDebug = "ERREUR Section: " + SectionNom + " NON Trouvé !!! " '
reponse par defaut
blnCleOK = False
blnSectOK = False

Rem---------------------------------------( Pour chaque ligne du
fichier d origine
Do
Enr = FicIni.readline
'-------------------------------------( test si cest une Section
et si c est la bonne
If Left(Enr, 1) = "[" Then
If Mid(Enr, 2, Len(Enr) - 2) = SectionNom Then
strDebug = "Section Trouvé: " + SectionNom + " "
blnSectOK = True
Else
blnSectOK = False
End If
Else
Rem ------------------------------( c est une ligne de
parametre
If blnSectOK Then ' on est dans la bonne section
If Left(Enr, Len(CleNom)) = CleNom Then
' cest la cle recherché dans la section voulue
blnCleOK = True
strDebug = strDebug + vbCr + "Clé trouvée: " +
CleNom
Enr = CleNom & "=" & CleVal
Rep = "Modif OK pour " + CleNom
End If
End If
End If
FicNew.writeline (Enr)
Loop Until FicIni.atendofstream = True
FicIni.Close
Rem --------------------------------------(Fin du fichier ini si pas
trouvé a joute la clé en fin de fichier
If Not blnCleOK Then
Enr = "[" + SectionNom + "]"
FicNew.writeline (Enr)
Enr = CleNom & "=" & CleVal
FicNew.writeline (Enr)
Rep = "Modif OK pour " + CleNom
End If

FicNew.Close
Rem --------------------------------------( verifie si nouveau
fichier existe avant kill du .ini !
If MyFSO.fileexists(NomFicNew) Then
MyFSO.deletefile (FullPathFicIni)
Set FicNew = MyFSO.getfile(NomFicNew)
FicNew.Name = MyFSO.GetFileName(FullPathFicIni)
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"
End If

SetParamIni = Rep
End Function

Avatar
Mikel83
C'est très sympa de ta part, et je t'en remercie beaucoup!
A charge de revanche....

NB: j'ai trouvé un code, un peu plus complexe, sur
http://www.motobit.com/tips/detpg_asp-vbs-read-write-ini-files/
Je n'ai pas encore testé...A voir!
--
Cordialement, Mikel



Mikel83 wrote:
Merci pour ta réponse! C'est bien ce que j'ai fait avant de poster....
recherche sur ce newsgroup --> rien trouvé
recherche sur google: --> les exemples trouvés se basent sur
"GetPrivateProfileString" qui apparemment, ne fonctionne pas en
VBSript

?????


HEuuuu, p'tet ben que j'ai dis une connerie, c'etait peut-etre sur le forum
vb.... desolé !

Pour me faire pardonner je te file mes 2 fonctions perso (...DJ)
ecture/ecriture, cadeau de la maison !

Mais ATTENTION , c'est pour des .ini perso dans lesquels la clé voulue est
unique (c'etait mon cas et ca me suffit...)
car je ne gere pas les entetes de rubrique telle qu'on peut les rencontrer
dans des ini MS avec parfois des clés de meme nom dans 2 rubriques
differentes.

En bonus la version ecriture (setparamini) avec gestion des rubriques qui
m'a l'air de bien marcher.
j'ai pas eu le temps de me pencher sur la version lecture.

j'espere que ca t'aidera.

DJ


Function SetParamDJ(ByVal FullPathFicIni, ByVal CleNom, ByVal CleVal)
Rem
***************************************************************************
Rem * Objet : modifie un parametre dans un Fichier .ini maison cle unique
*
Rem *
*
Rem * Entrées: Chemin complet du fichier ini a modifier
*
Rem * Nom de la cle a trouver
*
Rem * Nouvelle Valeur a affecter a la cle
*
Rem *
*
Rem * Retours: resultat de l operation
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, FicNew, NomFicNew, Enr, Rep

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ------------------------------------------(verifie l existance du
fichier ini a modifier
If MyFSO.fileexists(FullPathFicIni) Then
Rem---------------------------------------( recup du Nom complet d
origine sauf le .ini pour faire le .New
NomFicNew = Left(FullPathFicIni, Len(FullPathFicIni) - 4) & ".new"
Rem --------------------------------------( ouverture des fichiers
..ini et .new
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Set FicNew = MyFSO.createtextfile(NomFicNew, True)
Rep = "ERREUR Cle: " + CleNom + " NON Trouvé !!! " ' reponse par
defaut
Rem --------------------------------------( recopie chaque ligne du
ini dans le new
Do
Enr = FicIni.readline
If Left(Enr, Len(CleNom)) = CleNom Then
Rep = "Cle: " + CleNom + " Trouvé Maj OK" 'cle trouvée
modif valeur
Enr = CleNom & "=" & CleVal
End If
FicNew.writeline (Enr)
Loop Until FicIni.atendofstream = True
FicIni.Close
FicNew.Close
Rem --------------------------------------( verifie si nouveau
fichier existe avant kill du .ini !
If MyFSO.fileexists(NomFicNew) Then
MyFSO.deletefile (FullPathFicIni)
Set FicNew = MyFSO.getfile(NomFicNew)
FicNew.Name = MyFSO.GetFileName(FullPathFicIni)
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"

End If
SetParamDJ = Rep
End Function

Function LitParamDJ(ByVal FullPathFicIni, ByVal CleNom)
Rem
***************************************************************************
Rem * Objet : lecture d un parametre dans Fichier .ini maison cle unique
*
Rem *
*
Rem * Entrées: Chemin complet du fichier .ini
*
Rem * Nom de la cle a chercher
*
Rem *
*
Rem * Retours: valeur de la cle ou message d erreur sle ou ini pas trouvé
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, Enr, Fic, Rep

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ---------------------------------(verifie l existance du fichier ini
a Lire
If MyFSO.fileexists(FullPathFicIni) Then
Rem --------------------------------------( ouverture et lecture du
fichier ini
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Rep = "ERREUR - Cle: " + CleNom + " NON Trouvé !!! " 'reponse par
defaut si pas de cle
Do
Enr = FicIni.readline
If Left(Enr, Len(CleNom)) = CleNom Then
Rep = Right(Enr, (Len(Enr) - Len(CleNom)) - 1)
End If
Loop Until FicIni.atendofstream = True
FicIni.Close
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"
End If
LitParamDJ = Rep
End Function

Function SetParamIni(ByVal FullPathFicIni, ByVal SectionNom, ByVal CleNom,
ByVal CleVal)
Rem
***************************************************************************
Rem * Objet : modifie un parametre dans un Fichier .ini standart
*
Rem *
*
Rem * Entrées: Chemin complet du fichier ini a modifier
*
Rem * Nom de la section dans la quelle se trouve la clé sans
crochet *
Rem * Nom de la cle a trouver
*
Rem * Nouvelle Valeur a affecter a la cle
*
Rem *
*
Rem * Retours: resultat de l operation
*
Rem *
*
Rem
***************************************************************************
Rem *
Dim MyFSO, FicIni, FicNew, NomFicNew, Enr, Rep, blnCleOK, blnSectOK
Dim strDebug

Set MyFSO = CreateObject("Scripting.FileSystemObject")
Rem ------------------------------------------(verifie l existance du
fichier ini a modifier
If MyFSO.fileexists(FullPathFicIni) Then
Rem---------------------------------------( recup du Nom complet d
origine sauf le .ini pour faire le .New
NomFicNew = Left(FullPathFicIni, Len(FullPathFicIni) - 4) & ".new"
Rem --------------------------------------( ouverture des fichiers
..ini et .new
Set FicIni = MyFSO.opentextfile(FullPathFicIni)
Set FicNew = MyFSO.createtextfile(NomFicNew, True)
strDebug = "ERREUR Section: " + SectionNom + " NON Trouvé !!! " '
reponse par defaut
blnCleOK = False
blnSectOK = False

Rem---------------------------------------( Pour chaque ligne du
fichier d origine
Do
Enr = FicIni.readline
'-------------------------------------( test si cest une Section
et si c est la bonne
If Left(Enr, 1) = "[" Then
If Mid(Enr, 2, Len(Enr) - 2) = SectionNom Then
strDebug = "Section Trouvé: " + SectionNom + " "
blnSectOK = True
Else
blnSectOK = False
End If
Else
Rem ------------------------------( c est une ligne de
parametre
If blnSectOK Then ' on est dans la bonne section
If Left(Enr, Len(CleNom)) = CleNom Then
' cest la cle recherché dans la section voulue
blnCleOK = True
strDebug = strDebug + vbCr + "Clé trouvée: " +
CleNom
Enr = CleNom & "=" & CleVal
Rep = "Modif OK pour " + CleNom
End If
End If
End If
FicNew.writeline (Enr)
Loop Until FicIni.atendofstream = True
FicIni.Close
Rem --------------------------------------(Fin du fichier ini si pas
trouvé a joute la clé en fin de fichier
If Not blnCleOK Then
Enr = "[" + SectionNom + "]"
FicNew.writeline (Enr)
Enr = CleNom & "=" & CleVal
FicNew.writeline (Enr)
Rep = "Modif OK pour " + CleNom
End If

FicNew.Close
Rem --------------------------------------( verifie si nouveau
fichier existe avant kill du .ini !
If MyFSO.fileexists(NomFicNew) Then
MyFSO.deletefile (FullPathFicIni)
Set FicNew = MyFSO.getfile(NomFicNew)
FicNew.Name = MyFSO.GetFileName(FullPathFicIni)
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"
End If

SetParamIni = Rep
End Function






Avatar
Do Re Mi chel La Si Do
Bonjour !

Tout ça (les réponses) me semble bien compliqué !

Je t'ai contocté 7 scripts, plus simples, pour voir une clef d'un fichier
.INI

Je met le code-source ci-dessous

@-salutations

Michel Claveau:






@echo off
:: recherche d'une clef dans un fichier .ini
:: exemples avec le fichier C:CDex.ini
:: et rechercvhe de la clef SetSpeed



echo -----------------------------------------------
echo Méthode 1 (visualise simplement le résultat)
echo -
type C:CDex.ini | find /I "setspeed"



echo -----------------------------------------------
echo Méthode 2 (visualise simplement le résultat)
echo -
type %fichierini% | find /I "%clefcherchee%" > %TEMP%tmp.txt
for /F %%i in (%TEMP%tmp.txt) do (echo %%i)



echo -----------------------------------------------
echo Méthode 3 (avec affectation d'une variable)
echo -
type %fichierini% | find /I "%clefcherchee%" > %TEMP%tmp.txt
for /F %%i in (%TEMP%tmp.txt) do (set clef=%%i)
echo %clef%



echo -----------------------------------------------
echo Méthode 3 (enregistre le résultat dans un fichier, et l'affiche)
echo -
set clefcherchee=setspeed
set fichierini=C:CdEx.ini
type %fichierini% | find /I "%clefcherchee%" > %TEMP%tmp.txt
type %TEMP%tmp.txt



echo -----------------------------------------------
echo Méthode 4 (visualisation du résultat détaillé par un FOR)
echo -
set clefcherchee=setspeed
set fichierini=C:CdEx.ini
type %fichierini% | find /I "%clefcherchee%" > %TEMP%tmp.txt
for /F "tokens=1,* delims==:" %%i in (%TEMP%tmp.txt) do (echo Clef : %%i
Valeur : %%j)



echo -----------------------------------------------
echo Méthode 5 (par fichier + FOR + affectation à une variable)
echo -
type %fichierini% | find /I "%clefcherchee%" > %TEMP%tmp.txt
for /F %%i in (%TEMP%tmp.txt) do (set clef=%%i)
echo %clef%



echo -----------------------------------------------
echo Méthode 6 (par un call externe créé à la volée)
echo -
type C:CdEx.ini | find /I "setspeed" > %TEMP%tmp.txt
for /F %%i in (%TEMP%tmp.txt) do (echo set clef=%%i > %TEMP%tmp.bat)
call %TEMP%tmp
echo %clef%



echo -----------------------------------------------
echo Méthode 7 (avec call interne (sous-programme réutilisable)
echo et affectation à des variables)
echo -
call :ClefIni C:CdEx.ini setspeed
echo Clef : %clef% (dans %fichierini%)
echo Valeur: %valeur%
goto :EOF

:ClefIni
type %1 | find /I "%2" > %TEMP%tmp.txt
for /F "tokens=1,* delims==:" %%i in (%TEMP%tmp.txt) do (call :ClefIniVar
%1 %%i %%j)
goto :EOF

:ClefIniVar
set fichierini=%1
set clef=%2
set valeur=%3
goto :EOF
Avatar
Fred
Dans : news:u0hv0Q$,
Do Re Mi chel La Si Do disait :
Bonjour !


Bonjour Michel,

Tout ça (les réponses) me semble bien compliqué !

Je t'ai contocté 7 scripts, plus simples, pour voir une clef d'un
fichier .INI


Le roi du batch a encore frappé ! :-D
Pour trouver cela plus simple, il faut quand même une sacré maîtrise de
la ligne de commande !
Je prends bonne note de cette méthode très intéressante.
As-tu une solution de cet ordre pour la question «Suppression de
caractères» du 06/08/2005 ?
Je suppose que cela est faisable mais je suis un peu court sur cette
technique.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Do Re Mi chel La Si Do
Salut !


Le problème, c'est que je suis en vacances. Je me connecte
occasionnellement, pour récup. mes e-mails.
Je regarderai ce message un peu plus tard... (tu peux toujours regarder la
commande FINDSTR)

Concernant le Batch, j'ai préparé une page, que je mettrai sur un de mes
sites dans une semaine environ.
Mais, ça va remuer les consciences !


@-salutations

Michel Claveau
Avatar
Fred
Dans : news:,
Do Re Mi chel La Si Do disait :
Salut !

Le problème, c'est que je suis en vacances. Je me connecte
occasionnellement, pour récup. mes e-mails.
Je regarderai ce message un peu plus tard... (tu peux toujours
regarder la commande FINDSTR)


Ok, je voulais juste avoir ton avis sur la faisabilité de la chose. Je
jetterai un ½il sur cette commande.

Concernant le Batch, j'ai préparé une page, que je mettrai sur un de
mes sites dans une semaine environ.
Mais, ça va remuer les consciences !


C'est bien. J'attends cela avec curiosité !

Salutations et bonnes vacances :-)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
DJ
Do Re Mi chel La Si Do wrote:
Bonjour !

Tout ça (les réponses) me semble bien compliqué !

Je t'ai contocté 7 scripts, plus simples, pour voir une clef d'un
fichier .INI

Je met le code-source ci-dessous

@-salutations

Michel Claveau:


bonjour,

j'admire la technicité des commandes de .bat
mais plus court veut pas forcement dire plus simple loin de la !!!
de plus le monsieur il demandait du code vbcript....

DJ

Avatar
jbongran
Mikel83 wrote:
Bonjour à tous!

Ne voulant pas réinventer la roue, il doit bien exister un bout de
code VBScript permettant de lire une valeur dans une section d'un
fichier .ini ??? Merci d'avance pour vos suggestions...


http://www.google.fr/search?hl=fr&q=asp+ini&meta sinon, avec un objet COM:
http://www.abysslabs.com/products/com/inifile.phtml