OVH Cloud OVH Cloud

Lecture fichier INI

5 réponses
Avatar
Fabrice
Bonjour,

Comment peut on lire un fichier INI et récupérer des valeurs via un script ?

Merci

5 réponses

Avatar
didier TEST
Comment peut on lire un fichier INI et récupérer des valeurs via un script
?


Voila une petite fonction faite maison pour le meme probleme.

Attention ca suppose que le nom de la Clé est UNIQUE (ce qui est mon cas,
rien a secouer de l'entete de rubrique) et c'est sensible au Min/majuscule.
DJ


Function LitParamDJ(ByVal FullPathFicIni, ByVal CleNom)
Rem
***************************************************************************
Rem * Objet : lecture d un parametre dans Fichier .ini
*
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

Avatar
Fabrice
Merci

Et par le même occasion, comment écrire dans le fichier ini ?

Meric
"didier TEST" a écrit dans le message de news:


Comment peut on lire un fichier INI et récupérer des valeurs via un
script
?


Voila une petite fonction faite maison pour le meme probleme.

Attention ca suppose que le nom de la Clé est UNIQUE (ce qui est mon cas,
rien a secouer de l'entete de rubrique) et c'est sensible au
Min/majuscule.
DJ


Function LitParamDJ(ByVal FullPathFicIni, ByVal CleNom)
Rem
***************************************************************************
Rem * Objet : lecture d un parametre dans Fichier .ini
*
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





Avatar
didier TEST
"Fabrice" a écrit dans le message de
news:%
Merci

Et par le même occasion, comment écrire dans le fichier ini ?

voili, voila, toujours pareil ca marche avec une cle au nom unique pour des

ini perso
MAIS tu trouveras a la suite une autre fonction qui elle change une cle en
rapport avec son nom de section et visiblement ca a l'air de bien marcher
mon truc mais j'ai pas encore testé dans tous les sens .
Pour le Odbc.ini par exemple (je crois) il y a plusieurs cle avec le meme
nom dans differente section alors faut modifier le bon lien odbc !
DJ

Function SetParamDJ(ByVal FullPathFicIni, ByVal CleNom, ByVal CleVal)
Rem
***************************************************************************
Rem * Objet : modifie un parametre dans un Fichier .ini perso
*
Rem * cle unique
*
Rem * Entrées: Chemin complet du fivhier 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.GetBaseName(NomFicNew) + ".ini"
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"

End If
SetParamDJ = 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.GetBaseName(NomFicNew) + ".ini"
End If
Else
Rep = "ERREUR le fichier demandé : " + FullPathFicIni + " n'a
pas pu etre trouvé !"
End If

SetParamIni = Rep
End Function

Avatar
Alex
Bonjour,

Voici un script que j'avais utilisé pour récupérer une valeur d'un fichier
ini.

Alex

----------------------------------------

<job id="GetPrivateProfileString">
<script language="VBScript">
'---------------------------------------------------------------------------
------------------------
' NAME: GetPrivateProfileString.wsf
' FUNCTION: Get a value from an INI file, same Syntax as Win32 function
' cf.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilestring.asp
'---------------------------------------------------------------------------
------------------------
Option Explicit
Dim oLecture, sRetour
oLecture GetPrivateProfileString("Configuration","NoEditFunctionality","0",sRetour,,"
C:WINNTSaplogon.ini")
' le but est de récupérer la valeur du paramètre NoEditFunctionality de la
section Configuration du fichier Saplogon.ini
' cette valeur est par défaut 0
Wscript.echo sRetour

Function GetPrivateProfileString(lpSection, lpKeyName, lpDefault,
lpReturnedString, nSize, lpFileName )
Dim oFSO, oFile, sLine, sSection , sKeyName
Const ForAppending = 8
sSection = ""
GetPrivateProfileString = 0
If lpDefault <> "" Then
lpReturnedString = lpDefault
End If
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile( lpFileName, ForAppending, True)
While oFile.AtEndOfStream <> True
sLine = Trim(oFile.ReadLine)
If ( sLine <> "" ) And ( Left(sLine,1) <> ";" ) Then
If Left(sLine,1) = "[" Then
sSection = Trim(Split(Split(sLine,"[",-1,1)(1),"]",-1,1)(0))
Else
sKeyName = Trim(Split(sLine,"=",-1,1)(0))
If ( sSection = lpSection ) And ( sKeyName = lpKeyName )
Then
lpReturnedString = Trim(Split(sLine,"=",-1,1)(1))
If lpReturnedString = "" Then
lpReturnedString = lpDefault
End If
GetPrivateProfileString = Len(lpReturnedString)
Exit Function
End If
End If
End If
Wend
Set oFile = Nothing
Set oFSO = Nothing
End Function

</script>
</job>
Avatar
Sylvain
Voici un script vbs fait a la base par notre ami JCB et
legerement modifier par moi:



Option Explicit
Dim x, nom, socle, cle, quitter, fin, valeur, reponse,
old, keepold
Set x=New Ini
do
nom=InputBox ("entrer le nom du fichier","Nom
Fichier",nom)
if nom = "" Then
fin = MsgBox ("desirer vous
quittez ??", 308, "Sortir de read_ini")
If fin = 6 Then WScript.quit
End if
socle=InputBox ("entrer le nom de la
section","Nom Section",socle)
if socle = "" Then
fin = MsgBox ("desirer vous
quittez ??", 308, "Sortir de read_ini")
If fin = 6 Then WScript.quit
End if
cle=InputBox ("entrer le nom de la cle","Nom
cle",cle)
if cle = "" Then
fin = MsgBox ("desirer vous
quittez ??", 308, "Sortir de read_ini")
If fin = 6 Then WScript.quit
End If
x.Filename=nom
x.Section=socle
x.Key=cle
If x.value = "" Then
valeur=InputBox ("entrer la valeur de la
cle","Création de la cle",valeur)
if valeur = "" Then
fin = MsgBox ("desirer
vous quittez ??", 308, "Sortir de read_ini")
If fin = 6 Then
WScript.quit
End If
x.value=valeur
MsgBox "La cle " & x.Key & " de la section " &
x.section & vbcrlf & " a été créer avec la valeur : " &
vbcrlf & x.Value
Else
old = x.Value
MsgBox "La valeur de la cle " & x.Key & "
de la section " & x.section & " est : " & vbcrlf & old

reponse = MsgBox ("désirez vous modifier
la clé", 4, "Modification")
If reponse = 6 Then 'Oui
valeur=InputBox ("entrer la
valeur de la cle","Création de la cle",valeur)
if valeur = "" Then
fin = MsgBox
("desirer vous quittez ??", 308, "Sortir de read_ini")
If fin = 6 Then
WScript.quit
End If
keepold = MsgBox ("désirez vous
conserver l'ancienne valeur", 4, "Modification")
If reponse = 6 Then 'Oui
x.value=old & valeur
Else
x.value=valeur
End if
Else 'Non
WScript.Echo(reponse)
End If

End if
loop

Class Ini
Private fso,f
Public Filename 'Path to the ini File
Public Section '[section]
Public Key 'Key=Value
Public Default 'Return it when an error occurs

Private Sub Class_Initialize ' Setup Initialize
event.
Default=""
Set fso=CreateObject
("Scripting.FileSystemObject")
End Sub
Private Sub Class_Terminate ' Setup Terminate
event.
Set fso=Nothing
End Sub

Property Get Content()
'All the file in a string
If fso.FileExists(FileName) Then
Set f=fso.OpenTextFile(FileName,1)
Content=f.ReadAll
f.close
Set f=Nothing
Else
Content=""
End If
End Property
Property Let Content(sContent)
'Create a brand new ini file
Set f=fso.CreateTextFile(FileName,True)
f.Write sContent
f.close
Set f=Nothing
End Property

Property Get ContentArray()
'All the file in an array of lines
ContentArray=Split(Content,vbCrLf,-1,1)
End Property

Private Sub FindSection(ByRef StartLine, ByRef
EndLine)
Dim x,A,s
StartLine=-1
EndLine=-2
A=ContentArray
For x=0 To UBound(A)
s=UCase(Trim(A(x)))
If s="[" & UCase(section) & "]"
Then
StartLine=x
Else
If (Left(s,1)="[") And
(Right(s,1)="]") Then
If StartLine>=0
Then
EndLine=x-
1
If
EndLine>0 Then 'A Space before the next section ?

If Trim(A(EndLine))="" Then EndLine=EndLine-1
End If
Exit Sub
End If
End If
End If
Next
If (StartLine>0) And (EndLine<0) Then
EndLine=UBound(A)
End Sub

Property Get Value()
'Retrieve the value for the current key
in the current section
Dim x,i,j,A,s
FindSection i,j
A=ContentArray
ValueÞfault
'Search only in the good section
For x=i+1 To j
s=Trim(A(x))
If UCase(Left(s,Len(Key)))=UCase
(Key) Then
Select Case Mid(s,Len(Key)
+1,1)
Case "="
Value=Trim(Mid
(s,Len(Key)+2))
Exit Property
Case " ",chr(9)
x=Instr(Len
(Key),s,"=")
Value=Trim(Mid
(s,x+1))
Exit Property
End Select
End If
Next
End Property
Property Let Value(sValue)
' Write the value for a key in a section
Dim i,j,A,x,s,f
FindSection i,j
If i<0 Then 'Session doesn't exist
Content=Content & vbCrLf & vbCrLf
& "[" & section & "]" & vbCrLf & Key & "=" & sValue
Else
A=ContentArray
f=-1
'Search for the key, either the
key exists or not
For x=i+1 To j
s=Trim(A(x))
If UCase(Left(s,Len(Key)))
=UCase(Key) Then
Select Case Mid
(s,Len(Key)+1,1)
Case " ",chr
(9),"="
f=x
'Key found
A(x)=Key
& "=" & sValue
End Select
End If
Next
If f=-1 Then
'Not found, add it at the
end of the section
Redim Preserve A(UBound(A)
+1)
For x=UBound(A) To j+2
Step -1
A(x)=A(x-1)
Next
A(j+1)=Key & "=" & sValue
End If
'Define the content
s=""
For x=0 To UBound(A)
s=s & A(x) & vbCrLf
Next
'Suppress the last CRLF
If Right(s,2)=vbCrLf Then s=Left
(s,Len(s)-2)
Content=s 'Write it
End If
End Property
End Class



-----Message d'origine-----
Bonjour,

Comment peut on lire un fichier INI et récupérer des
valeurs via un script ?


Merci


.