AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Gewisse Zeile mit bestimmtem Wort aus Memo (html) auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Gewisse Zeile mit bestimmtem Wort aus Memo (html) auslesen

Ein Thema von Maxisoft2 · begonnen am 1. Feb 2008 · letzter Beitrag vom 3. Feb 2008
Antwort Antwort
Maxisoft2

Registriert seit: 8. Nov 2007
20 Beiträge
 
#1

Gewisse Zeile mit bestimmtem Wort aus Memo (html) auslesen

  Alt 1. Feb 2008, 16:53
Liebe Delphianer,

Ich stehe mal wieder vor einem Problem -
Ich muss für ein Forum ein Programm schreiben, dass den HTML Quelltext einer gewissen
Seite ausliest, und mir dann im Quelltext immer nur die folgenden Textstücke:
<A href="profile.php?ids=verschiedenezahlen">
rauskopiert und in einer .txt speichert.

Soweit sogut - momentan lese ich so den Quelltext der Seite aus und trage ihn in ein
Memo ein:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  vTemp : variant;
begin
  vTemp := WebBrowser1.Document;
  if Webbrowser1.LocationURL <> 'then
    Memo1.Text := vTemp.Body.OuterHTML
  else
    ShowMessage('Seite nicht vorhanden!');
end;
Wie bringe ich es nun zum Stande, dass Delphi auf einen Knopfdruck exakt diese Zeilen mit profile.php?
in ein weiteres Memo oder in eine Textdatei kopiert?


In der Hoffnung, dass die Frage nicht zu banal aber dennoch lösbar ist,
- M. S.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 1. Feb 2008, 17:05
mit folgendem Code ist das leicht möglich:
Delphi-Quellcode:
type
   TOnExtractLink = procedure(const URL:string) of object;
// Extract all Links from Document
procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink);
// Extract all Links from Browser's Document
procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink);

...

procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink);
var
   doc, links, link : OleVariant;
   i : Integer;
begin
   doc := Document;

   links := doc.links;

   for i:=0 to links.Length-1 do
   begin
      link := links.item(i);
      callback(link.HREF);
   end;
end;

procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink);
begin
   if not Assigned(WebBrowser.Document) then
      Exit;
   ExtractDocumentLinks(WebBrowser.Document, callback);
end;
Du rufst die Procedure ExtractWBLinks() auf und musst allerdings eine Calback-Methode angeben:

Delphi-Quellcode:
  ...
  ExtractWBLinks(WebBrowser1, AddToList);
  ...

procedure TForm1.AddToList(const URL:string);
begin
  // hier wäre Gelegenheit, unerwünschte oder doppelte URL auszufiltern
  
  if copy(URL, 1, 5) = 'http:then
     Memo1.Lines.Add(URL) // hier alle http: URL rein
  else
     Memo2.Lines.Add(URL); // und hier den Rest (ftp:, mailto: ,...)
end;
Andreas
  Mit Zitat antworten Zitat
Maxisoft2

Registriert seit: 8. Nov 2007
20 Beiträge
 
#3

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 1. Feb 2008, 18:10
Hammer !
Vielen Dank für die schnelle Hilfe, versuche es gleich mal!
  Mit Zitat antworten Zitat
Maxisoft2

Registriert seit: 8. Nov 2007
20 Beiträge
 
#4

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 2. Feb 2008, 21:24
Hallo nochmal!

Ich scheine irgendwie zu blöd dafür zu sein, das Script zum Laufen zu bringen.
Mir fehlt für addtolist wohl irgend eine Typendeklaration, aber ich komme nicht
drauf, wie ich AddToList deklarieren soll und ob überhaupt !?

So schaut mein Quelltext momentan aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw;

type

  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
   private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
   TOnExtractLink = procedure(const URL:string) of object;
// Extract all Links from Document
procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink);
// Extract all Links from Browser's Document
procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink);


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ExtractDocumentLinks(Document: IDispatch; callback:TOnExtractLink);
var
   doc, links, link : OleVariant;
   i : Integer;
begin
   doc := Document;

   links := doc.links;

   for i:=0 to links.Length-1 do
   begin
      link := links.item(i);
      callback(link.HREF);
   end;
end;

procedure ExtractWBLinks(WebBrowser: TWebBrowser; callback:TOnExtractLink);
begin
   if not Assigned(WebBrowser.Document) then
      Exit;
   ExtractDocumentLinks(WebBrowser.Document, callback);
end;

procedure TForm1.AddToList(const URL:string);
begin
  // hier wäre Gelegenheit, unerwünschte oder doppelte URL auszufiltern
 
  if copy(URL, 1, 5) = 'http:then
     Memo1.Lines.Add(URL) // hier alle http: URL rein
  else
     Memo2.Lines.Add(URL); // und hier den Rest (ftp:, mailto: ,...)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.webseite.de');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ExtractWBLinks(WebBrowser1, AddToList);
end;

end.
Einzigste Fehlermeldung die ich bekomme ist: "Undefinierter Bezeichner: 'AddToList'",
was ja nun auch logisch ist, da ich es ja nicht deklariert habe, oder habe ich irgend
etwas anderes falsch verstanden?

(Tut mir leid, bin noch am Lernen . Und habe nun echt lange versucht es selbst zu lösen,
aber komme einfach nicht drauf *verzweifel*)

Grüße,
- M. S.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 2. Feb 2008, 21:32
Hallo,

versuche es mal so:

Delphi-Quellcode:
// ...
  private
    { Private-Deklarationen }
    procedure AddToList(const URL:string);
// ...
Gute Nacht
  Mit Zitat antworten Zitat
Maxisoft2

Registriert seit: 8. Nov 2007
20 Beiträge
 
#6

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 2. Feb 2008, 21:39
Nabend nochmal,

Der oberhammer! Alles funktioniert - und ich habe wieder mal dazugelernt Super!
Danke Dir für den schnellen Späteinsatz,

Gute Nacht,
- M.S.
  Mit Zitat antworten Zitat
Maxisoft2

Registriert seit: 8. Nov 2007
20 Beiträge
 
#7

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 2. Feb 2008, 22:37
Hallo -

Ich fürchte, ich habe doch noch eine Frage.

Mit dem jetzigen Script füge ich alle Html-Links dem Memo hinzu.
Kann ich irgendwie schaffen, nur Links in diesem Format ins Memo
zu kopieren?
http://www.webseite.de/profile.php?ids=variierendezahl

Ich habe mir den Post mit dem Leerzeilen löschen angesehen, und dachte mir,
ich könnte vielleicht alles "aussen um die gewollten Links" löschen (also
alle anderen Links) funktioniert aber auch nicht.

Mein Erster versuch war natürlich in dieser Zeile:
Delphi-Quellcode:
  if copy(URL, 1, 5) = 'http://www.webseite.de/profile.php?ids=*then
     Memo1.Lines.Add(URL) // hier alle http: URL rein
Einfach den Anfang der Zeile mit einem * anzugeben, funktioniert leider nicht.
(So landen alle Links in Memo 2)
Wahrscheinlich ist mein Annährungsversuch nicht ganz so richtig,
ich würde mich riesig über weitere Hilfe freuen!

Lässt sich vielleicht einfach im jetzigen Quelltext festlegen, dass
nur die gewollten Urls in das Memo kopiert werden?

Grüße,
- M.S.

EDIT:

Habe es nun mit einem StringReplace gelöst, indem ich alle mir bekannten, nicht gewollten urls lösche.
Klappt soweit. Über elegantere Lösungen bin ich natürlich happy
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 3. Feb 2008, 08:01
Moin,

du könntest die Prozedur AddList so umbauen:

Delphi-Quellcode:
uses
  StrUtils; // AnsiStartsText, RightStr

procedure TForm1.AddToList(const URL:string);
const
  PFX = 'http://www.webseite.de/profile.php?';
begin
  if AnsiStartsText(PFX, URL)
    then Memo1.Lines.Add(RightStr(URL, Length(URL) - Length(PFX)))
    else Memo2.Lines.Add(URL);
end;
Das hätte den Vorteil, dass du auf die variierenden Zahlen mit Memo1.Lines.ValueFromIndex[i] zugreifen kannst.

Freundliche Grüße
  Mit Zitat antworten Zitat
Maxisoft2

Registriert seit: 8. Nov 2007
20 Beiträge
 
#9

Re: Gewisse Zeile mit bestimmtem Wort aus Memo (html) ausles

  Alt 3. Feb 2008, 12:32
Hallo!

Super Sache!
Vorallem genial, dass ich so die Ids einzeln bekomme!
Der Oberwahnsinn!

Hab' tausend Dank,
- M. S.
  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 06:19 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