Mirror

Merge the sections of two TIniFiles (Views: 709)


Problem/Question/Abstract:

Imagine there are two win.ini files and I want to combine both together. Some of the common sections and keys/ values are the same in each but they differ in their data generally. How could I merge the two together to get an ini file that contains all the data from both in the right places?

Answer:

Iterate over the sections in the source file. For each section, iterate over the names. If there is a name in Source that already exists in Dest, Dest's copy will be overwritten.

{ ... }
var
  Source, Dest: TIniFile;
  SectionNames: TStrings;
  i: Integer;
begin
  SectionNames := TStringList.Create;
  try
    Source.ReadSections(SectionNames);
    for i := 0 to SectionNames.Count - 1 do
    begin
      MergeSection(Source, Dest, SectionNames[i]);
    end;
  finally
    SectionNames.Free;
  end;
end;

procedure MergeSection(Source, Dest: TIniFile; const SectionName: string);
var
  i: Integer;
  Section: TStrings;
  Name, Value: string;
begin
  Section := TStringList.Create;
  try
    Source.ReadSection(SectionName, Section);
    for i := 0 to Section.Count - 1 do
    begin
      Name := Section.Names[i];
      Value := Section.Values[Name];
      Dest.WriteString(SectionName, Name, Value);
    end;
  finally
    Section.Free;
  end;
end;

<< Back to main page