![]() |
Wie die Zeilenenden einer Stringlist erkennen?
Moin Leute,
kurze Frage: ich suche in einer Stringlist zeilenweise nach einem Ausdruck, der immer (!) am Zeilenende steht, z.B. sieht die List so aus: 1 #9 357 #9 Ungarn 2 #9 657 #9 Ungarns 3 #9 876 #9 Ungarnheute ... Ich suche jetzt die Zeile, die exakt den Ausdruck "Ungarn" enthält. Wenn ich dafür sage:
Delphi-Quellcode:
und sep='' dann finde ich sämtliche Ausdruckskombinationen (also: "Ungarn" -> "Ungarn", "Ungarns", "Ungarnheute" usw.).
for i:=0 to list.count-1 do
begin //... if pos(#9 {= vordere Abgrenzung des Ausdrucks in jeder Zeile} + edit1.text {Suchtext} + sep {= Separator zur Markierung der Ausdrucksgrenze}, list.strings[i])<>0 then gefunden:= i; end; Ich möchte aber NUR "Ungarn" haben. sep=#13 funktioniert aber nicht (dann findet er nichts mehr), weil nach dem Ausdruck in der List kein Zeilenumbruch steht (auch sonst steht da nichts, was als Begrenzungszeichen helfen würde). Gibt es am Zeilenende bei Stringlists irgendein unsichtbares Steuerzeichen, mit dem ich den Suchausdruck separieren kann? Danke und viele Grüße, friedemann |
Re: Wie die Zeilenenden einer Stringlist erkennen?
Zitat:
|
Re: Wie die Zeilenenden einer Stringlist erkennen?
Die länge des gesuchten Begriffs ist doch auch bekannt, man könnte als die letzten X + 1 (die 1 für den Separator) Zeichen aus der jeweiligen Zeile kopieren und mit Separator + Suchbegriff vergleichen.
|
Re: Wie die Zeilenenden einer Stringlist erkennen?
Hm, ok, habt recht. Ich hoffte, es ginge einfacher, da die Funktion mehrfach verwendet wird auch für andere Listen, wo sep<>''.. Geht jetzt dennoch via Abgleich von Ausdruck und Suchausdruck.
Danke und Gruß, fri |
Re: Wie die Zeilenenden einer Stringlist erkennen?
Zitat:
Code:
^.*Ungarn$
|
Re: Wie die Zeilenenden einer Stringlist erkennen?
Zitat:
Code:
oder
\tUngarn$
Code:
\x09Ungarn$
Delphi-Quellcode:
for i:=0 to list.count-1 do
begin if pos(#9 + edit1.text, list[i]) = Length(list[i]) - Length(edit1.text) then begin gefunden:= i; break; end; end;
Delphi-Quellcode:
for i:=0 to list.count-1 do
begin if PosEx(#9 + edit1.text, list[i], Length(list[i]) - Length(edit1.text)) <> 0 then begin gefunden:= i; break; end; end;
Delphi-Quellcode:
S := #9 + edit1.text;
for i:=0 to list.count-1 do begin if PosEx(S, list[i], Length(list[i]) - Length(S) + 1) <> 0 then begin gefunden:= i; break; end; end; |
Re: Wie die Zeilenenden einer Stringlist erkennen?
Oder einfacher:
Delphi-Quellcode:
(Dafür muss die Unit "StrUtils" eingebunden werden
for i:=0 to list.count-1 do
begin if EndsText(edit1.text, list[i]) then begin gefunden:= i; break; end; end; |
Re: Wie die Zeilenenden einer Stringlist erkennen?
Und eine Version ohne Break und etwas genauer den Tabulator betreffend:
Delphi-Quellcode:
i := 0;
gefunden := -1; while (i < list.Count) and (gefunden < 0) do begin if EndsText(#9 + edit1.text, list[i]) then gefunden:= i; inc(i); end; |
Re: Wie die Zeilenenden einer Stringlist erkennen?
@himitsu:
sicher, dass das #9 auch wirklich ein TAB darstellen soll, und nicht als String-Literal zu betrachten ist? Evtl. bringst Du den TE so auf eine falsche Fährte. In jedem Fall bist Du so nicht dynamisch, wenn Du das Zeichen vor dem gesuchten fix angibst. Und wenn Du das tust, dann solltest Du eine Wortgrenze nehmen, da das TAB mitgefressen wird, und der Stringvergleich dann nicht mehr matcht. |
Re: Wie die Zeilenenden einer Stringlist erkennen?
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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