Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Tstringlist hat ein Maximum von 3277 Zeilen? (https://www.delphipraxis.net/186354-tstringlist-hat-ein-maximum-von-3277-zeilen.html)

nahpets 26. Aug 2015 18:39

AW: Tstringlist hat ein Maximum von 3277 Zeilen?
 
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...

hoika 26. Aug 2015 21:25

AW: Tstringlist hat ein Maximum von 3277 Zeilen?
 
Hallo,

an den TE, was spricht gegen TMemIniFile (wie schon mehrfach erwähnt?)


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz