![]() |
Delphi-Version: 7
Innere Struktur von TStrings / TMemo
Hallo zusammen,
es ist Freitag und vllt. Zeit für eine Frage neben dem täglichen Stress. In der letzten Woche bin ich über einen der nicht auszurottenden Fehler gestoßen, eine Vis. Komponente als Datenspeicher mißbrauchen. Und zwar war folgendes:
Delphi-Quellcode:
Ist natürlich nicht der Originalcode, aber es reicht.
procedure procc(const l1:tstrings);
var ll : tstrings; begin ll:=tstringlist.Create; {fülle ll} for i:=0 to ll.count-1 do if pos('irgendwas',ll[i])>0 then l1.add(ll[i]); {!BP!} ll.free; end; Irgendwo im programm gab es dann ein
Delphi-Quellcode:
und ein for
procc(memo1.lines);
Delphi-Quellcode:
wobei l2 natürlich auch einen Bezug zu Memo1.Lines hat. Hier waren die Ergebnisse nun überhaupt nicht so wie ich es erwartet hatte, mit ein wenig Debuggerbenutzung bin ich dann auf folgendes gestoßen:
i:=0 to l2.count-1 do ..
nach BP habe ich folgende Dateninhalte: ll[0] = 'ganz schön langer string mehr als 255 Zeichen' ll[1] = 'ganz schön langer string1 mehr als 255 Zeichen' ll.Text = 'ganz schön langer string mehr als 255 Zeichen'x0Dx0A'ganz schön langer string1 mehr als 255 Zeichen'x0Dx0A l1.Text = 'ganz schön langer string mehr als 255 Zeichen'x0Dx0A'ganz schön langer string1 mehr als 255 Zeichen'x0Dx0A l1[0] = 'ganz schön langer' l1[1] = 'string mit mehr als' l1[2] = '255 Zeichen' l1[3] = 'ganz schön langer' ... usw Klar ist mir daß der "Zeilenumbruch" der Darstellung des TMemo geschuldet ist, doch müßte es doch dann korrekter Weise auch in .Text zu finden sein:
Code:
und eben das ist nicht der Fall.
'ganz schön langer'x0Dx0A'string mit mehr als'x0Dx0A'255 Zeichen'
habt Ihr dafür eine schlüssige Erklärung? Gruß K-H |
AW: Innere Struktur von TStrings / TMemo
Nur TStringList kann innerhalb eines "Strings" Zeilenumbrüche verwalten, aber nur solange man die Strings dort drin belässt.
> Text, SaveTo... usw. lössen das auf Grundsätzlich ist es also nicht möglich, außer du kodierst dir "diese" Zeilenumbrücke in etwas anderes (z.B. StringReplase in '<br>' oder sonstwas) Anstonsten sollte man bei Zeilenlängen ab 255 1024 oder 4048 aufpassen, da einige Editoren damit nicht klar kommen. (z.B. der Codeeditor im Delphi ab 4047). |
AW: Innere Struktur von TStrings / TMemo
Zitat:
Deine übergebene Strings (Memo.Lines) im Parameter l1 wird in dieser Prozedure niemals irgendetwas hinzugefügt werden, da die For-Schleife niemals durchlaufen wird. |
AW: Innere Struktur von TStrings / TMemo
Zitat:
Zitat:
|
AW: Innere Struktur von TStrings / TMemo
Zitat:
Da steht {fülle ll} aber seine Anweisungen danach sagen "Füge zu l1 etwas hinzu" und zwar aus ll. Ja was will er denn jetzt wirklich? |
AW: Innere Struktur von TStrings / TMemo
ll wird lokal erzeugt und irgendwie (interessiert hier auch nicht wirklich, wie genau) befüllt, anschließend zeilenweise durchlaufen und nach bestimmten Kriterien wird die aktuelle Zeile der übergebenen Liste hinzugefügt. Ich verstehe gar nicht, wieso Du nun hier die Welle machst.
|
AW: Innere Struktur von TStrings / TMemo
Zitat:
Den Kommentar hast Du so verstanden, dass dort ll befüllt wird. Aslo statt des Kommentars die Füllanweisung steht. Ich jedoch war mir nicht sicher, denn der Kommentar kann auch aussagen, dass jetzt das Befüllen ll in der For-Schleife stattfinden soll. Es könnte ja ein verbleibendes Kommentarreststück aus dem OriginalCode sein. Und dann wäre schon der Code falsch. Und wenn für Dich alles so einleuchtend ist, dann hätte er auch eine globale Variable i. |
AW: Innere Struktur von TStrings / TMemo
Ich kenne K-H nun schon lange genug, um zu wissen, dass er so blöd nicht ist. Einerseits wird immer darauf gepocht, nur den relevanten Code zu posten, andererseits wird sich dann darüber echauffiert, wenn man ihn entsprechend eindampft. Aber gut, wenn das hier wieder so ein 40-Seiten-Thread werden soll, weil man sich an Niggeligkeiten hochzieht, dann bitteschön, ich bin hiermit raus, zumal himitsu ja wohl den entscheidenden Hinweis bereits gegeben hat.
|
AW: Innere Struktur von TStrings / TMemo
Ach ja, nur um nochmal den Grund zu erklären, warum das nicht so geht, mit Zeilenumbrüchen in Zeilen.
[edit] Noch ein Post hat Platz, bis die Seite voll ist. :stupid: |
AW: Innere Struktur von TStrings / TMemo
Wir füllen ja sie Stringliste mit der Funktion Add.
Diese hängt offensichtlich den WagenrücklaufUndZeilenvorschub x0d0a automatisch an. Nicht das Tmemo ist dafür zuständig, sondern das TStringlist Objekt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz