AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Wie die Zeilenenden einer Stringlist erkennen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie die Zeilenenden einer Stringlist erkennen?

Ein Thema von friedemann2009 · begonnen am 10. Mär 2010 · letzter Beitrag vom 10. Mär 2010
Antwort Antwort
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#1

Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 10:53
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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 10:58
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?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 11:05
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#4

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 11:33
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
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 11:34
Zitat von friedemann2009:
Ich suche jetzt die Zeile, die exakt den Ausdruck "Ungarn" enthält.
Bediene Dich des regulären Ausdrucks
Code:
^.*Ungarn$
Gruß
s-off
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 11:48
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#7

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 12:49
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 12:57
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 12:59
@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.
Gruß
s-off
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Wie die Zeilenenden einer Stringlist erkennen?

  Alt 10. Mär 2010, 13:04
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 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