Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wie die Zeilenenden einer Stringlist erkennen? (https://www.delphipraxis.net/148884-wie-die-zeilenenden-einer-stringlist-erkennen.html)

friedemann2009 10. Mär 2010 10:53


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:
             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;
und sep='' dann finde ich sämtliche Ausdruckskombinationen (also: "Ungarn" -> "Ungarn", "Ungarns", "Ungarnheute" usw.).

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

Sharky 10. Mär 2010 10:58

Re: Wie die Zeilenenden einer Stringlist erkennen?
 
Zitat:

Zitat von friedemann2009
...
Gibt es am Zeilenende bei Stringlists irgendein unsichtbares Steuerzeichen, mit dem ich den Suchausdruck separieren kann?

Du weisst doch wie lange die Zeile ist. Warum nimmst Du das nicht zur Auswertung?

DeddyH 10. Mär 2010 11:05

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.

friedemann2009 10. Mär 2010 11:33

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

s-off 10. Mär 2010 11:34

Re: Wie die Zeilenenden einer Stringlist erkennen?
 
Zitat:

Zitat von friedemann2009
Ich suche jetzt die Zeile, die exakt den Ausdruck "Ungarn" enthält.

Bediene Dich des regulären Ausdrucks
Code:
^.*Ungarn$

himitsu 10. Mär 2010 11:48

Re: Wie die Zeilenenden einer Stringlist erkennen?
 
Zitat:

Zitat von s-off
Bediene Dich des regulären Ausdrucks

Code:
\tUngarn$
oder
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;

KrasserChecker 10. Mär 2010 12:49

Re: Wie die Zeilenenden einer Stringlist erkennen?
 
Oder einfacher:

Delphi-Quellcode:
for i:=0 to list.count-1 do
begin

  if EndsText(edit1.text, list[i]) then begin
    gefunden:= i;
    break;
  end;
end;
(Dafür muss die Unit "StrUtils" eingebunden werden

DeddyH 10. Mär 2010 12:57

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;

s-off 10. Mär 2010 12:59

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.

p80286 10. Mär 2010 13:04

Re: Wie die Zeilenenden einer Stringlist erkennen?
 
Zitat:

Zitat von KrasserChecker
Oder einfacher:

Delphi-Quellcode:
for i:=0 to list.count-1 do
begin

  if EndsText(edit1.text, list[i]) then begin
    gefunden:= i;
    break;
  end;
end;
(Dafür muss die Unit "StrUtils" eingebunden werden

Und ab welcher Delphi-Version gibt es EndsText ?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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