Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#31

AW: Tstringlist hat ein Maximum von 3277 Zeilen?

  Alt 26. Aug 2015, 18:39
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...
  Mit Zitat antworten Zitat