TStringList Delete

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.

TStringList Delete

Beitragvon Swirl » 23. Nov 2015, 09:48 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
Arbeite mit Lazarus 2.0.6 - FPC 3.0.4 auf Mint/KDE Neon
Spiele mit Lazarus auf macOS 10.14 (Mojave)
Swirl
 
Beiträge: 33
Registriert: 7. Aug 2015, 13:05
Wohnort: Schwerte
OS, Lazarus, FPC: win mac ux / jeweils aktuell | 
CPU-Target: x86_64, ARM Cort.-A7
Nach oben

Beitragvon mschnell » 23. Nov 2015, 10:26 Re: TStringList Delete

Zeige vor Liste.Delete Liste.Count an um zu sehen wie viele Einträge wirklich drin sind.

-Michael
mschnell
 
Beiträge: 3394
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon theo » 23. Nov 2015, 11:10 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.
theo
 
Beiträge: 8255
Registriert: 11. Sep 2006, 18:01

Beitragvon Swirl » 23. Nov 2015, 19:45 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 :(
Arbeite mit Lazarus 2.0.6 - FPC 3.0.4 auf Mint/KDE Neon
Spiele mit Lazarus auf macOS 10.14 (Mojave)
Swirl
 
Beiträge: 33
Registriert: 7. Aug 2015, 13:05
Wohnort: Schwerte
OS, Lazarus, FPC: win mac ux / jeweils aktuell | 
CPU-Target: x86_64, ARM Cort.-A7
Nach oben

Beitragvon m.fuchs » 23. Nov 2015, 20:25 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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
Lazarusforum e. V.
 
Beiträge: 2184
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (Lazarus 2.0, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon af0815 » 23. Nov 2015, 21:55 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).
af0815
 
Beiträge: 3924
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Swirl » 24. Nov 2015, 07:48 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
Arbeite mit Lazarus 2.0.6 - FPC 3.0.4 auf Mint/KDE Neon
Spiele mit Lazarus auf macOS 10.14 (Mojave)
Swirl
 
Beiträge: 33
Registriert: 7. Aug 2015, 13:05
Wohnort: Schwerte
OS, Lazarus, FPC: win mac ux / jeweils aktuell | 
CPU-Target: x86_64, ARM Cort.-A7
Nach oben

Beitragvon rvk » 24. Nov 2015, 11:15 Re: TStringList Delete

Swirl hat geschrieben:... aber den Debugger hatte ich für die letzte Testphase wg. des (bekannten) FileOpenDialog-Problems weggeklemmt...

Tools > Options > Debugger > General: set DisableLoadSymbolsForLibraries to true
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);
rvk
 
Beiträge: 2
Registriert: 20. Aug 2014, 23:49
OS, Lazarus, FPC: Win7 64 bit, Laz trunk, FPC trunk | 
CPU-Target: 32Bit
Nach oben

Beitragvon Swirl » 24. Nov 2015, 17:34 Re: TStringList Delete

rvk hat geschrieben:Tools > Options > Debugger > General: set DisableLoadSymbolsForLibraries to true
und Sie können den Debugger erneut verwenden.


...Habe ich gemacht, kann jetzt wenigstens ohne den nervigen Ausstieg weiter debuggen.

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
Arbeite mit Lazarus 2.0.6 - FPC 3.0.4 auf Mint/KDE Neon
Spiele mit Lazarus auf macOS 10.14 (Mojave)
Swirl
 
Beiträge: 33
Registriert: 7. Aug 2015, 13:05
Wohnort: Schwerte
OS, Lazarus, FPC: win mac ux / jeweils aktuell | 
CPU-Target: x86_64, ARM Cort.-A7
Nach oben

• Themenende •

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried