Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Memo nach einem String durchsuchen (https://www.delphipraxis.net/1797-memo-nach-einem-string-durchsuchen.html)

thomasdrewermann 24. Dez 2002 14:43


Memo nach einem String durchsuchen
 
Hi Leute,
ich hab ein problem beim durchsuchen eines Memos nach einem bestimmen String. Ich hätte gerne die Zeile zurückgegeben in der der Suchtext vorhanden ist. Liefert das Memo Feld von Hause aus schon diese Funktion?

MFG
Thomas

Christian Seehase 24. Dez 2002 15:24

Moin Thomas,

eingebaut: Nicht direkt, nur indirekt.

Schau Dir mal an, was hierbei rauskommt:

Delphi-Quellcode:
  ShowMessage('Zeile: '+IntToStr(SendMessage(Memo1.Handle,EM_LINEFROMCHAR,Memo1.SelStart,0)));
Die erste Zeile hat den Index 0.

sakura 24. Dez 2002 17:03

Doch, hat das Memo, zumindest für genaue Treffer:
Delphi-Quellcode:
Memo1.Lines.IndexOf('Zeile');

thomasdrewermann 25. Dez 2002 00:29

Danke!

Ich werds direkt morgen ausprobieren.

Jetzt wander ich erstmal locker, leich und bekömmlich in mein Bett. :mrgreen:


MFG
Thomas

Christian Seehase 27. Dez 2002 03:13

Moin sakura,

ich würde es noch etwas genauer formulieren:

Wenn man den exakten Zeileninhalt sucht, unabhängig von der Gross-/Kleinschreibung, geht's mit IndexOf.

masters001 8. Feb 2003 14:35

Hallo ich möchte gerne wissen ob ein bestimmtes word in meinem Memo vorhande ist!
Aber warum funktioniert eine solche if abfrage nicht?
Was hab ich falsch gemacht

if (Memo1.Lines.IndexOf('Bestätigung:')) then showmessage('true');
if (Memo1.Lines.IndexOf('Achtung:')) then showmessage('false');

Oder muss ich das noch irgendwie s:

if (Memo1.Lines.IndexOf('Bestätigung:'))=true

in der Art schreiben?
Vielen Dank
masters001

Christian Seehase 8. Feb 2003 14:42

Moin Masters,

kann nicht funktionieren.
Schau Dir noch mal genau die Beschreibung zu IndexOf an:
Hier wird nur dann ein Wert zurückgeliefert, wenn eine Zeile exakt den String enthält, der in IndexOf als Parameter übergeben wird (wobei nur die Gross-/KLeinschreibung nicht berücksichtigt wird.

Enthält die Zeile also auch nur ein Zeichen mehr (und sei es ein Blank) wird die Zeile nicht als Fundstelle angesehen.

Versuch's doch mal mit

Delphi-Quellcode:
if pos('Gesuchtes Wort',Memo1.Text) > 0 then
Wenn Du allerdings öfter in Memo.Text suchen willst, ohne dass sich der Inhalt des Memo geändert hat, empfiehlt es sich dringend Memo1.Text in eine Stringvariable zu übertragen, da bei jedem Ansprechen von Text dieser Wert durch das Zusammensammeln der einzelnen Lines ermittelt wird, so dass die Performance kräftig in die Knie gehen würde.

masters001 8. Feb 2003 15:35

Ja vielen Dank klappt wunderbar

sahmann 16. Feb 2003 15:42

Nochmal etwas spezieller zu Pos()
 
Hallo zusammen,

ich sitze gerade an einem ähnlichen Problem. Allerdings möchte
ich innerhalb einer Stringvariable (ein HTML- Quelltext) gewisse
Teile rauskopieren. Und zwar so:

Delphi-Quellcode:
Quelltext := IdHTTP1.Get([url]http://irgendeine.seite.de/[/url]);
name := copy(Quelltext, 1, (PosEx('</head>', Quelltext)));
ShowMessage(name);
Nun ist mir dabei folgendes aufgefallen, was wohl nicht so
einfach umschifft werden kann. Wenn hinter dem '</head>' (im
HTML- Quellcode) nun direkt weitere HTML- Tags stehen,
wie zum Beispiel hier:

</head></a>[/b]

dann gibt mir die Funktion nicht den Index des exakten Anfang
der gefundenen Position, sondern eben 8 mehr. Der Rueckgabewert
ist also ein hoeherer Integer- Wert.

Bedeutet dies, das Pos() nicht zum durchsuchen von kontinuierlichem
Text verwendet werden sollte? Da stellt sich nun die Frage wie kann
man es umgehen / welche Funktionen gibt es noch?

Es ist Sonntag, und wir haben alle nichts zu Tun :P

Gruesse,
der Sascha

Christian Seehase 16. Feb 2003 15:57

Moin Sascha,

zum einen:

Was ist PosEx?

zum anderen:

Pos gibt das Auftreten der ersten Fundstelle von z.B. </head> zurück, also die Position von < im gesuchten String. Was dahinter steht spielt dann doch keine Rolle.

In der Code Library steht, meines Wissens, auch eine erweiterte Pos Funktion, mit der das kontinuierliche Durchsuchen ermöglicht wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Seite 1 von 2  1 2      

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