Les Snippets

Connexion

Fusionner deux fichiers INI

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 15/06/2007 13:11:55 et initié par Renfield [Liste]
Date de mise à jour : 20/06/2007 22:00:09
Vue : 4050
Catégorie(s) : API, Fichier / Disque, Chaîne de caractères
Langages dispo pour ce code :
- VB6, VBA
- Delphi 5
- Windev



Langage : VB6 , VBA
Date ajout : 15/06/2007
Posté par Renfield [Liste]
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 
Remarque :
MergeIniFiles App.Path & "\First.ini", App.Path & "\Second.ini" , App.Path & "\Merge.ini"

Le fichier de destination est optionnel. Si vous ne mettez rien, le fichier deux sera la cible.
NB: Le fichier 1 est prioritaire sur le fichier 2. C'est a dire que si un parametre existe dans les deux fichiers, c'est la valeur contenue dans le premier fichier que l'on retrouvera dans le fichier résultant de la fusion.
Langage : Delphi 5
Date ajout : 20/06/2007
Posté par f0xi [Liste]
DateMAJ : 20/06/2007
uses IniFiles;
procedure IncludeIniFile(Src, Dest : TIniFile);
var PE,NA,NB : integer;
    VL,SL : TStringList;
    VID,VVL : String;
begin
  VL := TStringList.Create;
  SL := TStringList.Create;
  try
    SL.BeginUpdate;
    try
      Src.ReadSections(SL);
    finally
      SL.EndUpdate;
    end;
    if SL.Count > 0 then
      for NA := 0 to SL.Count-1 do
      begin
        VL.BeginUpdate;
        try
          Src.ReadSectionValues(SL[NA],VL);
        finally
          VL.EndUpdate;
        end;
        if VL.Count > 0 then
          for NB := 0 to VL.Count-1 do
          begin
            PE  := Pos('=',VL[NB]);
            VID := Copy(VL[NB], 1, PE-1);
            VVL := Copy(VL[NB], PE+1, Length(VL[NB])-PE);
            Dest.WriteString(SL[NA],VID,VVL);
          end;
      end;
  finally
    SL.Free;
    VL.Free;
  end;
end;

Remarque :
Src et Dest sont des fichiers Ini existants, Src sera inclus dans Dest en remplaçant les valeurs communes au deux fichiers.
Langage : Windev
Date ajout : 29/06/2007
Posté par Elian Lacroix [Liste]

PROCEDURE FusionneINI(sINISource, sINIDestination)
// sINISource : Chemin du fichier .INI qui sera copié dans la destination
// sINIDestination : Chemin du fichier .INI qui recevra le fichier source
// Aprés traitement sINIDestination a son contenu initial et en plus celui de sINISource
// Si une entrée est commune, c'est celle de sINISource qui est conservée au final
// Si sINIDestination est vide ou inexistant, il deviendra sINISource

sListeSectionSource, sSection sont des chaines
sListeMotcleSource, sMotCle sont des chaines

sListeSectionSource = INILit("","","", sINISource)
POUR TOUTE CHAINE sSection DE sListeSectionSource SEPAREE PAR RC
 sListeMotcleSource = INILit(sSection, "", "", sINISource)
 POUR TOUTE CHAINE sMotCle DE sListeMotcleSource SEPAREE PAR RC
    SI sSection <> "" ET sMotCle <> "" ALORS
       INIEcrit(sSection, sMotCle, ...
             INILit(sSection, sMotCle, "", sINISource),...
             sINIDestination)
    FIN
 FIN
FIN


Snippets en rapport avec : Ini, Configuration, Merge, Fusionner, Fusion



Codes sources en rapport avec : Ini, Configuration, Merge, Fusionner, Fusion

{Visual Basic, VB6, VB.NET, VB 2005} CLASSE FICHIER DE CONFIGURATION (REGISTRE/INI)
Alors, rien d'exceptionel dans ce code, juste une classe simplifiant les api windows de lecture/éc...

{PHP} CLASSE COMPLÈTE DE GESTION DES FICHIERS DE CONFIGURATION INI.
Je crois que le titre résume plutôt bien l'utilité de la classe :) ... C'est une classe qui permet d...

{C# / C#.NET} DECOUPER/FUSIONNER DES FICHIERS
Découper et fusionner des fichiers en C# Suite à la discussion sur http://www.vbfrance.com/code.a...

{JAVA / J2EE} GESTION DE FICHIER DE CONFIGURATION .INI
Je devais utiliser un fichier de configuration (.ini) à la windows sur mon appli Java. Du coup, j'ai...

{Visual Basic, VB6, VB.NET, VB 2005} ENREGISTRER ET APPLIQUER LES PARAMÈTRES D'UNE FORM EN 2 LIGNES [CTL]
C'est une question qui revient sans cesse : comment ouvrir une Form en gardant sa dernière configura...

{PHP} LECTURE ECRITURE DANS UN FICHIER DE CONFIGURATION , DONNÉES
Je viens de faire ces 2 fonctions dans le but d'écrire et lire des données en dur. Ce script peut ê...

{PHP} GÉRER DES FICHIERS DE CONFIGURATION INI [POO]
Encore une classe PHP opérationnelle et complète qui reprend les lignes essentielles de la classe TI...

{Javascript / DHTML} GESTION DES FICHIERS .INI
j'ai voulu créer l'équivalent de la gestion des fichiers .ini que l'on retouve dans la plupart des...

{PHP} GESTION D'UN FICHIER DE CONFIGURATION
Ce code tiré d'une source de winzou (http://www.phpcs.com/code.aspx?id=29179) permet de gérer un fic...

{C# / C#.NET} CLASS CONFINI POUR GERER LES FICHIERS .INI
Encore un boulet qui fait dans le .ini à l'heure du xml... Ben vi :) Bon, désolé, c'est mon premie...