Fusionner deux fichiers INI

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 138 fois - Téléchargée 8 fois

Contenu du snippet

Private Declare Function GetPrivateProfileSection Lib "kernel32.dll" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Sub MergeIniFiles(ByRef vsFirstFile As String, ByRef vsSecondFile As String, Optional ByVal vsDestFile As String)
Dim sBuffer As String
Dim nLength As Long
Dim iSection As Long
Dim iLine As Long
Dim xsSections() As String
Dim xsLines() As String
Dim nPos As Long
Dim nBuffserSize As Long
   If LenB(vsDestFile) Then
       FileCopy vsSecondFile, vsDestFile
   Else
       vsDestFile = vsSecondFile
   End If
   
   nBuffserSize = 0
   Do
       nBuffserSize = nBuffserSize + &H4000&
       sBuffer = Space$(nBuffserSize)
       nLength = GetPrivateProfileSectionNames(sBuffer, nBuffserSize, vsFirstFile)
   Loop While nLength = nBuffserSize - 2
   xsSections = Split(Left$(sBuffer, nLength), vbNullChar)
   For iSection = 0 To UBound(xsSections)
       If LenB(xsSections(iSection)) Then
           nBuffserSize = 0
           Do
               nBuffserSize = nBuffserSize + &H4000&
               sBuffer = Space$(nBuffserSize)
               nLength = GetPrivateProfileSection(xsSections(iSection), sBuffer, nBuffserSize, vsFirstFile)
           Loop While nLength = nBuffserSize - 2
           xsLines = Split(Left$(sBuffer, nLength), vbNullChar)
           
           For iLine = 0 To UBound(xsLines)
               nPos = InStr(xsLines(iLine), "=")
               If nPos Then
                   WritePrivateProfileString xsSections(iSection), Left$(xsLines(iLine), nPos - 1), Mid$(xsLines(iLine), nPos + 1), vsDestFile
               End If
           Next iLine
       End If
   Next iSection
End Sub 

Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.