Um diese Ini zu lesen, braucht man nicht unbedingt IniFiles (laut Delphi 7-Sourcen mit einer Begrenzung auf 16384 Byte - {delphi}\
rtl\IniFiles.pas)
Delphi-Quellcode:
var
sl : TStringList;
slSections : TStringList;
i : Integer;
begin
sl := TStringList.Create;
slSections := TStringList.Create;
sl.LoadFromFile('dateiname.ini');
for i := 0 to sl.Count - 1 do begin
if Copy(sl[i],1,1) = '[' then begin
slSections.Add(AnsiReplaceText(AnsiReplaceText(sl[i],'[',''),']',''));
end;
end;
...
end;
Damit hat man in slSection eben alle Sections.
Die kann man dann, wie auch immer abarbeiten.
Der Zugriff auf eine Section kann dann so erfolgen:
Delphi-Quellcode:
iIndex := sl.IndexOf(Format('[%s]',[slSection[i]]));
if iIndex > -1 then begin
// Bei der Struktur der Beispiel-Ini von weiter oben:
// [1000]
// Name=Max1
// Nachname=Mustermann1
// Kostenstelle=1
// Punkte=10
sName := sl[iIndex + 1];
sNachname := sl[iIndex + 2];
sKostenstelle := sl[iIndex + 3];
sPunkte := sl[iIndex + 4];
...
end;
Das kann man so nur machen, wenn man sich auf die Struktur absolut verlassen kann, ansonsten eben die "Datenübernahme" in eine plausible Logik packen und das Überschreiten von sl.Count - 1 beachten.
Delphi-Quellcode:
iIndex := sl.IndexOf(Format('[%s]',[slSection[i]]));
if iIndex > -1 then begin
...
// Schreiben dann halt mit:
sl[iIndex + 1] := sName;
sl[iIndex + 2] := sNachname
sl[iIndex + 3] := sKostenstelle;
sl[iIndex + 4] := sPunkte;
end else begin
sl.Add(Format('[%s]',[slSection[i]]));
sl.Add(sName);
sl.Add(sNachname);
sl.Add(sKostenstelle);
sl.Add(sPunkte);
end;
sl.SaveToFile('dateiname.ini');
end;
Wer fleißig ist, baut sich 'ne Klasse, die das Ganze kapselt und pfeift auf die INI-Beschränkungen...