![]() |
Zeilenumbruch von TStrings finden
Moin,
ich suche gerade im BCB nach einem Zeilenumbruch von TStrings um einen Text aus einem Memo zeilenweise auszudrucken. Nur findet die Funktion Pos() nicht das, was ich suche. Was mache ich da falsch?
Code:
Auch der Zugriff auf den Substring
i = Pos(Char(13),Comment->Text)
Code:
liefert keinen sinnvollen Wert;
i = Pos(String(Char(13)),Comment->Text.w_str());
Comment ist eine TStringList, die den Text aus einem TMemo übergeben bekommt. Das interessante ist, das
Code:
mir den korrekten SubString rauskopiert.
s = Comment->Text.SubString(1,Pos(Char(13),Comment->Text)-1);
Grüße, Messie |
Re: Zeilenumbruch von TStrings finden
Hast Du den Delimiter verstellt oder warum such Du in einer Komponente die Strings zeilenweise auflistet nach Zeilenumbrüchen im String?
Grüsse, Dirk |
Re: Zeilenumbruch von TStrings finden
Also wenn ich mich recht erinnere, dann werden Zeilenumbrüche unter Windows als Carriage Return + Line Feed oder
Delphi-Quellcode:
abgebildet.
Char(13) + Char(10)
Man kann aber auch einfach
Delphi-Quellcode:
verwenden
#13#10
|
Re: Zeilenumbruch von TStrings finden
Zeilenumbrüche:
#13 - MAC (das neue RichEdit in Windows nutzt aber auch dieses :wall: ) #10 - Linux #13#10 - Windows #$0085 #13#$0085 #$2028 Sicher daß wirklich eine #13 vorkommt? @HeikoAdams: Dann müßte aber dennoch die #13 / Char(13) gefunden werden. |
Re: Zeilenumbruch von TStrings finden
Zitat:
Erstens funktioniert das Rauskopieren des Substring. Dann kann ich mir im Debugger den String ansehen, der hat je nach Anzeige "\r" oder 0x000D wenn man den Debugger-Hint aufklappt. Ich denke, es gibt irgendein Problem mit dem internen Cast des Substring. Das mit dem DelimitedText werde ich auch mal probieren, das andere finde ich trotzdem wichtig, denn die Funktion Pos() benutze ich schon häufiger mal. Grüße, Messie |
Re: Zeilenumbruch von TStrings finden
also unter Delphi hat der Zugriff mit
Delphi-Quellcode:
bzw.
i := Pos(#10, AStringlist.Text);
Delphi-Quellcode:
funktioniert. Allerdings musste ich für das Schreiben in ein XML Dokument nach beiden suchen und elimieren.
i := Pos(#13, AStringlist.Text);
Hoffe es hilft dir. Viele Grüße Sybok |
Re: Zeilenumbruch von TStrings finden
Nur um das nochmals aufzugreifen...
- Eine StringListe enthält die Strings schon in getrennter Form. - Der Zugriff auf .Text setzt alles jedesmal zu einem neuen String zusammen. - Wozu also selber nach dem Zeilenumbruch suchen, wenn man es doch schon fertig zerlegt vorliegen hat? |
Re: Zeilenumbruch von TStrings finden
Zitat:
AStringList.Text ist unter Delphi zwar auch ein Pointer, der verweist aber auf einen vorhandenen Variablenspeicher. AStringList->Text ist nur ein Pointer, hinter dem offenbar kein Variablenspeicher steht. Deshalb funktionier Pos() auf einen solchen Ausdruck im BCB nicht. Innerhalb der Funktion AStringList->Text.SubStr() funktioniert Pos(), weil offensichtlich zuerst für ->Text Speicher reserviert wird, dann kopiert wird und anschließend darin gesucht wird. Ich habe nun einen Variablenspeicher geschaffen und ->Text da reinkopiert
Code:
Mannomann, da soll man mal drauf kommen...
String s1;
s1 = AStringList->Text; s1.Delete(1,Pos(Char(13),s1)+1); //das geht jetzt richtig Danke für die Unterstützung, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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-2025 by Thomas Breitkreuz