TStringList Delete
- Swirl
- Beiträge: 99
- Registriert: Fr 7. Aug 2015, 14:05
- OS, Lazarus, FPC: Win 11 / Mint 22.1 / Lazarus 36 / FPC 3.2.2
- CPU-Target: x86_64, ARM Cort.-A7
- Wohnort: Schwerte NRW
TStringList Delete
Hallo in's Forum,
habe das u.g. Problem - Mein Codeschnipsel:
******************************************************************************************************
...
Liste := TStringList.Create;
...
Liste.Add(UTF8ToAnsi(Zeile)); // und das ca. 100-mal
Liste.Delete(1); // soll 'raus, da nicht relevant
Liste.SaveToFile('D:\Test.txt');
...
Liste.Free;
******************************************************************************************************
Wenn ich mir jetzt die Datei »Test.txt« anschaue, ist ALLES ab der 2. Zeile (incl.) gelöscht.
Zur Visualisierung des Problems habe ich vor »SaveToFile« ein »Memo1.Lines.Assign(Liste);«
eingefügt. Es sind alle Zeilen vorhanden und das Einzelzeilen-Löschen innerhalb des Memos
klappt problemlos. Nur eben nicht in »Liste«. Dort ist dann alles ab der gewählten Zeile futsch.
Da ich den Verdacht hatte, dass in der Datei zwar alles schön zeilenweise (mit Umbruch) lesbar
ist, aber dass ab der 2 Zeile in »Liste« jedoch quasi nur ein Einzeiler »d'rin ist« habe ich auf
»Liste.delete(2)« geändert. Et voila: »List index (2) out of bounds«.
Was mich dann aber wundert, ist, dass wenn ich ohne das »Delete« arbeite, kann ich im Hex-
Editor sehen, dass Am Ende jeder Zeile ein Carriagereturn/Linefeed steht. Stehe jetzt auf
dem Schlauch...
Hoffe es ist einigermaßen verständlich geschildert.
Mein System:
Win7 64bit - Lazarus 1.4.0 - FPC 2.6.4 - SVN 48774
Gruß,
Swirl
habe das u.g. Problem - Mein Codeschnipsel:
******************************************************************************************************
...
Liste := TStringList.Create;
...
Liste.Add(UTF8ToAnsi(Zeile)); // und das ca. 100-mal
Liste.Delete(1); // soll 'raus, da nicht relevant
Liste.SaveToFile('D:\Test.txt');
...
Liste.Free;
******************************************************************************************************
Wenn ich mir jetzt die Datei »Test.txt« anschaue, ist ALLES ab der 2. Zeile (incl.) gelöscht.
Zur Visualisierung des Problems habe ich vor »SaveToFile« ein »Memo1.Lines.Assign(Liste);«
eingefügt. Es sind alle Zeilen vorhanden und das Einzelzeilen-Löschen innerhalb des Memos
klappt problemlos. Nur eben nicht in »Liste«. Dort ist dann alles ab der gewählten Zeile futsch.
Da ich den Verdacht hatte, dass in der Datei zwar alles schön zeilenweise (mit Umbruch) lesbar
ist, aber dass ab der 2 Zeile in »Liste« jedoch quasi nur ein Einzeiler »d'rin ist« habe ich auf
»Liste.delete(2)« geändert. Et voila: »List index (2) out of bounds«.
Was mich dann aber wundert, ist, dass wenn ich ohne das »Delete« arbeite, kann ich im Hex-
Editor sehen, dass Am Ende jeder Zeile ein Carriagereturn/Linefeed steht. Stehe jetzt auf
dem Schlauch...
Hoffe es ist einigermaßen verständlich geschildert.
Mein System:
Win7 64bit - Lazarus 1.4.0 - FPC 2.6.4 - SVN 48774
Gruß,
Swirl
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: TStringList Delete
Zeige vor Liste.Delete Liste.Count an um zu sehen wie viele Einträge wirklich drin sind.
-Michael
-Michael
Re: TStringList Delete
@Swirl: Hänge doch mal ein minimales Projekt an (zip), welches das beobachtete Verhalten zeigt. Inklusive den Inhalten von "Zeile" die du einfügst.
So kann man wenig sagen.
So kann man wenig sagen.
- Swirl
- Beiträge: 99
- Registriert: Fr 7. Aug 2015, 14:05
- OS, Lazarus, FPC: Win 11 / Mint 22.1 / Lazarus 36 / FPC 3.2.2
- CPU-Target: x86_64, ARM Cort.-A7
- Wohnort: Schwerte NRW
Re: TStringList Delete
Mann seid Ihr schnell - besten Dank Michael und Theo!
den Tip von Michael habe ich beherzigt, ».Count« zeigt mir 159 an, das entspricht der Menge der Zeilen,
die in der gespeicherten Liste ohne Delete zu sehen sind.
Der Aufforderung von Theo wollte ich mit einem Minimalprojekt nachkommen. Damit hatte ich jedoch ein
neues Problem; ich konnte nämlich mein altes Problem nicht reproduzieren. Dies hängt wohl mit der Art
des Auslesens der Quelldaten aus einem Stringgrid nebst einfügen von Tabs (#9) zusammen. Da ich Euch
aber nicht mein Gesamtprojekt zumuten möchte, werde ich in den nächsten Tagen versuchen, mein Problem
in ein kleines Projekt zu »destillieren«...
Besten Dank einstweilen,
Michael
p.s.: 'ne halbe Stunde später
Ich glaube, ich brauche 'mal 'ne Woche Urlaub...
frmLDIF.Caption := IntToStr(Liste.Count);
//Liste.Delete(1);
Dieser Code gibt mir in meiner Form.Caption die o.g. »159« - klar, da wird ja auch nix deleted.
frmLDIF.Caption := IntToStr(Liste.Count);
Liste.Delete(1);
Dieser Code gibt mir in meiner Form.Caption eine »2« - das Delete steht aber wohlgemerkt HINTER
dem Anzeigen des .Count. Wie kann das Count wissen, dass hinterher 'nen Delete kommt? Sorry für
das Simpel-Sprech, aber da habe ich wohl irgendwas GANZ FALSCH verstanden
den Tip von Michael habe ich beherzigt, ».Count« zeigt mir 159 an, das entspricht der Menge der Zeilen,
die in der gespeicherten Liste ohne Delete zu sehen sind.
Der Aufforderung von Theo wollte ich mit einem Minimalprojekt nachkommen. Damit hatte ich jedoch ein
neues Problem; ich konnte nämlich mein altes Problem nicht reproduzieren. Dies hängt wohl mit der Art
des Auslesens der Quelldaten aus einem Stringgrid nebst einfügen von Tabs (#9) zusammen. Da ich Euch
aber nicht mein Gesamtprojekt zumuten möchte, werde ich in den nächsten Tagen versuchen, mein Problem
in ein kleines Projekt zu »destillieren«...
Besten Dank einstweilen,
Michael
p.s.: 'ne halbe Stunde später
Ich glaube, ich brauche 'mal 'ne Woche Urlaub...
frmLDIF.Caption := IntToStr(Liste.Count);
//Liste.Delete(1);
Dieser Code gibt mir in meiner Form.Caption die o.g. »159« - klar, da wird ja auch nix deleted.
frmLDIF.Caption := IntToStr(Liste.Count);
Liste.Delete(1);
Dieser Code gibt mir in meiner Form.Caption eine »2« - das Delete steht aber wohlgemerkt HINTER
dem Anzeigen des .Count. Wie kann das Count wissen, dass hinterher 'nen Delete kommt? Sorry für
das Simpel-Sprech, aber da habe ich wohl irgendwas GANZ FALSCH verstanden

=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2807
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: TStringList Delete
Irgendwas läuft da falsch. Und die Tatsache dass du in einem Minimalbeispiel das Problem nicht reproduzieren kannst, sagt dir dass irgendetwas anderes daran schuld ist.
Nimm deinen jetzigen Code, mach eine Kopie davon und versuch diese immer weiter einzudampfen, bis das Problem gefunden ist.
Nimm deinen jetzigen Code, mach eine Kopie davon und versuch diese immer weiter einzudampfen, bis das Problem gefunden ist.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TStringList Delete
Ist das Problem auch mit dem Debugger nachvollziehbar ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Swirl
- Beiträge: 99
- Registriert: Fr 7. Aug 2015, 14:05
- OS, Lazarus, FPC: Win 11 / Mint 22.1 / Lazarus 36 / FPC 3.2.2
- CPU-Target: x86_64, ARM Cort.-A7
- Wohnort: Schwerte NRW
Re: TStringList Delete
Besten Dank auch an m.fuchs und af0815,
ich kombiniere Euer »eindampfen« und »Debugger« am Mittw/Don. (bin heute ziemlich im Stress)
Asche auf mein Haupt, aber den Debugger hatte ich für die letzte Testphase wg. des (bekannten)
FileOpenDialog-Problems weggeklemmt...
Gruß,
Michael
ich kombiniere Euer »eindampfen« und »Debugger« am Mittw/Don. (bin heute ziemlich im Stress)
Asche auf mein Haupt, aber den Debugger hatte ich für die letzte Testphase wg. des (bekannten)
FileOpenDialog-Problems weggeklemmt...
Gruß,
Michael
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2
-
- Beiträge: 2
- Registriert: Do 21. Aug 2014, 00:49
- OS, Lazarus, FPC: Win7 64 bit, Laz trunk, FPC trunk
- CPU-Target: 32Bit
Re: TStringList Delete
Tools > Options > Debugger > General: set DisableLoadSymbolsForLibraries to trueSwirl hat geschrieben:... aber den Debugger hatte ich für die letzte Testphase wg. des (bekannten) FileOpenDialog-Problems weggeklemmt...
und Sie können den Debugger erneut verwenden.
Ich denke, dass Ihr tstringlist.delete mehrmals aufgerufen wird.
Sie könnten versuchen, dies zu überprüfen.
Code: Alles auswählen
frmLDIF.Caption := frmLDIF.Caption + ' ' +IntToStr(Liste.Count);
Liste.Delete(1);
- Swirl
- Beiträge: 99
- Registriert: Fr 7. Aug 2015, 14:05
- OS, Lazarus, FPC: Win 11 / Mint 22.1 / Lazarus 36 / FPC 3.2.2
- CPU-Target: x86_64, ARM Cort.-A7
- Wohnort: Schwerte NRW
Re: TStringList Delete
...Habe ich gemacht, kann jetzt wenigstens ohne den nervigen Ausstieg weiter debuggen.rvk hat geschrieben:Tools > Options > Debugger > General: set DisableLoadSymbolsForLibraries to true
und Sie können den Debugger erneut verwenden.
Das mit dem mehrmaligen Aufruf schließe ich erstmal aus, habe meine Schleifen dahingehend
untersucht. Vermute eher, dass mir Steuerzeichen dazwischenpfuschen - übernehme die Daten
für die Stringliste aus einem Grid, in das ich vorher vermutlich etwas 'reingeschrieben habe,
was »nicht sichtbar« ist.
Besten Dank. Versuche jetzt, mein Problem weiter runterzudrillen. Werde mich bei dann melden.
Michael
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2