Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeilenumbruch von TStrings finden (https://www.delphipraxis.net/149615-zeilenumbruch-von-tstrings-finden.html)

messie 25. Mär 2010 10:16


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:
i = Pos(Char(13),Comment->Text)
Auch der Zugriff auf den Substring
Code:
i = Pos(String(Char(13)),Comment->Text.w_str());
liefert keinen sinnvollen Wert;

Comment ist eine TStringList, die den Text aus einem TMemo übergeben bekommt.

Das interessante ist, das
Code:
s = Comment->Text.SubString(1,Pos(Char(13),Comment->Text)-1);
mir den korrekten SubString rauskopiert.

Grüße, Messie

Tryer 25. Mär 2010 10:27

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

HeikoAdams 25. Mär 2010 10:28

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:
Char(13) + Char(10)
abgebildet.

Man kann aber auch einfach
Delphi-Quellcode:
#13#10
verwenden

himitsu 25. Mär 2010 10:33

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.

messie 25. Mär 2010 10:54

Re: Zeilenumbruch von TStrings finden
 
Zitat:

Zitat von himitsu
Zeilenumbrüche:
Sicher daß wirklich eine #13 vorkommt?

Ja, ziemlich.
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

Sybok Factor 25. Mär 2010 11:20

Re: Zeilenumbruch von TStrings finden
 
also unter Delphi hat der Zugriff mit
Delphi-Quellcode:
 i := Pos(#10, AStringlist.Text);
bzw.
Delphi-Quellcode:
 i := Pos(#13, AStringlist.Text);
funktioniert. Allerdings musste ich für das Schreiben in ein XML Dokument nach beiden suchen und elimieren.
Hoffe es hilft dir.

Viele Grüße
Sybok

himitsu 25. Mär 2010 11:58

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?

messie 25. Mär 2010 11:58

Re: Zeilenumbruch von TStrings finden
 
Zitat:

Zitat von Sybok Factor
Jetzte michse verstehen dein Problem!

Ja, mich jetzt auch :mrgreen:

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:
String s1;
s1 = AStringList->Text;
s1.Delete(1,Pos(Char(13),s1)+1); //das geht jetzt richtig
Mannomann, da soll man mal drauf kommen...

Danke für die Unterstützung, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.

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