Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Quelltext laden und durchsuchen (https://www.delphipraxis.net/80926-quelltext-laden-und-durchsuchen.html)

newuser01 17. Nov 2006 15:03


Quelltext laden und durchsuchen
 
Hallo

Ich würde gerne nach dem ich eine Webseite geladen hab diese nach einem bestimmten Wort durchsuchen. Delimiter bringt mich da nicht besonders weiter weil das gesuchte Wort ja überall auf der Seite sein könnte. Vielleicht könnt ihr ja helfen

Delphi-Quellcode:
//Seite laden
Memo1.Text := IdHTTP1.Get(sURL);

SirThornberry 17. Nov 2006 15:05

Re: Quelltext laden und durchsuchen
 
Generell kann man mit Pos und PosEx nach teilvorkommen in einem String suchen. Könntest du deine Frage eventuelle noch etwas präzisieren warum es mit den genannten Funktionen nicht geht?

newuser01 17. Nov 2006 15:24

Re: Quelltext laden und durchsuchen
 
Hallo Jens

Delimiter geht nicht weil das gesuchte Wort nicht immer nach oder vor einem bestimmten Zeichen steht es könnte überall auf der Webseite stehen also ist doch Delimiter nicht geeignet oder?

newuser01 17. Nov 2006 15:27

Re: Quelltext laden und durchsuchen
 
Oder könnte man das gesuchte Wort selbst als Delimiter nutzen also Delimiter := 'searchWort' und dann alles vor und nach dem Delimiter abschneiden ginge das?

Jarmen_Kell 17. Nov 2006 15:30

Re: Quelltext laden und durchsuchen
 
Ein Delimeter muss vom Typ Char sein, daher ginge das nicht.

Wenn du es unbedingt damit lösen möchtest, ließe sich die delimetierende Eigenschaft des Leerzeichens nutzen, so das gesuchte Wort denn generell alleine steht.

Ansonsten dürfte ein TFileStream oder TMemoryStream eine effizientere Möglichkeit bieten.
Dazu sollte es im Forum genügend Beispiele geben, wenn es noch Fragen gibt, dürfen die natürlich auch in einem entsprechenden Thread gestellt werden ;}

newuser01 17. Nov 2006 15:40

Re: Quelltext laden und durchsuchen
 
Also meinst du das Leerzeichen als Delimiter einsetzten? und dann immer zwischen das aktuelle und folgende Leerzeichen schauen ob das gesuchte Wort vorhanden ist oder? Ich weiß nur nicht so genau wie ich das Programmiertechnisch lösen könnte :mrgreen: und TFileStream oder TMemoryStream sagen mir bezüglich String suchen auch nicht sehr viel.

SirThornberry 17. Nov 2006 16:24

Re: Quelltext laden und durchsuchen
 
wie kommst du im Zusammenhang von pos auf einen delimiter? *grübel* Mit Pos bzw. PosEx einfach nach dem gewünschten Wort suchen und dann prüfen ob vor und Hinter dem Wort kein anderer Buchstabe steht (sonst wäre es nur ein Teil eines anderen Wortes). :)

newuser01 17. Nov 2006 16:56

Re: Quelltext laden und durchsuchen
 
Hab es so gelöst oder geht es noch besser?

Delphi-Quellcode:

 Memo1.Text := IdHTTP1.Get(sURL);

 i := Pos('searchWort', Memo1.Text);

 if i > 0 then
 begin
  MessageDlg('gesuchte Wort gefunden!', mtWarning, [mbOK], 0);
 end
    else
        begin
         MessageDlg('gesuchte Wort nicht gefunden', mtWarning, [mbOK], 0);
 end;//if

raiguen 17. Nov 2006 23:14

Re: Quelltext laden und durchsuchen
 
Zitat:

Zitat von SirThornberry
Generell kann man mit Pos und PosEx nach teilvorkommen in einem String suchen. ...

Somit ist dein Codeschnippsel richtig, kannst ihn sogar noch etwas verkürzen (sofern die Variable i für die gefundene Position des Suchwortes nicht weiter in der Proc genutzt wird):
Delphi-Quellcode:
...
Memo1.Text := IdHTTP1.Get(sURL);
if Pos('searchWort', Memo1.Text) > 0 then
   begin
      //--mach was sinnvolles
   end
else
   begin
      MessageDlg('gesuchte Wort nicht gefunden', mtWarning, [mbOK], 0);
end;//

bonanza 1. Dez 2006 15:03

Re: Quelltext laden und durchsuchen
 
kann man auch irgendwie eine suche so programmieren , dass die alles das wegschneidet, was nicht zwischen 2 gesuchten wörtern liegt ?

wenn ja wie würde das gehen ?

danke schonmal

marabu 1. Dez 2006 19:17

Re: Quelltext laden und durchsuchen
 
Hi,

vielleicht hilft dir die Funktion Between(): klick

Grüße vom marabu

bonanza 8. Dez 2006 14:05

Re: Quelltext laden und durchsuchen
 
was muss ich denn der funktion übergeben ?

wofür steht die constante "s" und die variablen "sleft" und "sright" und welchen text durchsucht er ?

Interceptor 8. Dez 2006 15:05

Re: Quelltext laden und durchsuchen
 
Evtl. noch RegularExpressions
wäre wohl mit die sauberste Lösung

marabu 8. Dez 2006 16:23

Re: Quelltext laden und durchsuchen
 
Hi,

Zitat:

Zitat von bonanza
was muss ich denn der funktion übergeben ?

wofür steht die constante "s" und die variablen "sleft" und "sright" und welchen text durchsucht er ?

das und anderes steht in Beitrag #11 des verlinkten threads.

Zitat:

Zitat von bonanza
kann man auch irgendwie eine suche so programmieren , dass die alles das wegschneidet, was nicht zwischen 2 gesuchten wörtern liegt ?

Delphi-Quellcode:
const
  S_TEXT
    = 'Ich geh und kaufe Farbe und Pinsel im Nu' + sLineBreak
    + 'eine Rolle Tapete und Nägel dazu.' + sLineBreak
    + 'Der Verkäufer fragt in leutseligem Ton:' + sLineBreak
    + '"Ist das Alles?" Ich sag: "Ja, ''n Hammer hab ich schon!"'
    ;
  S_LEFT = 'eine';
  S_RIGHT = 'dazu';
begin
  ShowMessage(S_LEFT + Between(S_TEXT, S_LEFT, S_RIGHT) + S_RIGHT);
end;
Freundliche Grüße

bonanza 8. Dez 2006 16:45

Re: Quelltext laden und durchsuchen
 
kann man das auch irgendwie so anpassen, dass nicht nur nach einem paar sucht ? sondern wenn man z.b. einen text nac mehreren solcher dinge durchsuchen will, dass alle angezeigt werden ?

marabu 8. Dez 2006 17:09

Re: Quelltext laden und durchsuchen
 
Deine Frage ist mir zu unspezifisch.
Kannst du etwas mehr ins Detail gehen?
Eventuell mit einem Beispiel?

bonanza 11. Dez 2006 17:35

Re: Quelltext laden und durchsuchen
 
wenn ich jetzt z.b. folgendenden Text habe:

Peter spielt mit Christopf Fußball
Heinz spielt mit Holger Fußball
Jürgen spielt mit Udo Fußball


dann soll das programm z.b. alles was von MIT und FUßBALL eingeschlossen ist z.b. in einen anderen string kopieren.

marabu 11. Dez 2006 17:45

Re: Quelltext laden und durchsuchen
 
Hi,

wenn du deinen Text in einem Memo stehen hast und die Namen der Mitspieler in einer ListBox sehen möchtest, dann könntest du so vorgehen:

Delphi-Quellcode:
procedure ExtractNames(slIn, slOut: TStrings);
var
  i: Integer;
begin
  slOut.BeginUpdate;
  try
    slOut.Clear;
    for i := 0 to Pred(slIn.Count) do
      slOut.Add(Between(slIn[i], 'mit ', ' Fußball'));
  finally
    slOut.EndUpdate;
  end;
end;

// Testen mit: ExtractNames(Memo.Lines, ListBox.Items);
Freundliche Grüße


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