Autor Beitrag
webrage
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 29.08.02 03:15 
hallo alle zusammen...
folgendes problem:

ich hab einen kompletten seitenquelltext der enthält z.b. 3 links...

ich will diese 3 links aus dem gesamten quelltext extrahieren
mit pos geht nich weil pos immer nur das erste vorkommen anzeigt.

eine schleife zu fahren und nach <a href=" zu suchen geht nich so wie ich es bisher probiert hab...

ich muss also aus einem string alle vorkommenden urls zwischen
allen <a href=" und dem folgenden " extrahieren....

kann mir bitte jemand auf die sprünge helfen ?
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Do 29.08.02 07:36 
Hi webrange user defined image,

ich kenn da eine Komponente, die solche Aufgaben sehr zuverlässig und einfach erledigt. Findest du hier :P

Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Do 29.08.02 08:16 
folgenden code, habe ich mal in einem programm verwendet. Des programm ist allerdings schon recht alt und dementsprechend ist der code auf etwas "ungekürzt" und nicht sonderlich gut. Aber er funktioniert :mrgreen:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
procedure TForm1.SearchFiles;
var
  i,k,l: Integer;
  tmp, url, test: String;
  fertig,ende: Boolean;
  tmpfile,temp: TStringlist;
begin
  try
    filesuf := TStringlist.Create;
    temp := TStringList.Create;
    tmpfile := TStringlist.Create;
    tmpfile.LoadFromFile('tmp.html');
    if usercancel = false then
    begin
      for i := 1 to Length(tmpfile.Text) do
      begin
        if usercancel = false then
        begin
          Application.ProcessMessages;
          tmp := Copy(tmpfile.Text,i,5);
          tmp := LowerCase(tmp);
          if tmp = 'href=' then
          begin
            temp.Add(IntToStr(i));
          end;
        end
        else
        begin
          exit;
        end;
      end;

      //Jetzt werden die Links rausgesucht

      for i := 0 to temp.Count -1 do
      begin
        if usercancel = False then
        begin
          url := '';
          fertig := false;
          ende := false;
          k := StrToInt(temp[i]);
          for l := k + 6 to Length(tmpfile.Text) do
          begin
            test := Copy(tmpfile.Text,l,1);
            if (test <> '"') and (fertig = false) and (ende = false) then
            begin
              url := url + test;
            end;
            if (test = '"') and (fertig = false) and (ende = false) then
            begin
              fertig := True;
              ende := True;
            end;
            if (fertig = True) and (ende = True) then
            begin
              filesuf.Add(url);
              break;
            end;
          end;
        end
        else
        begin
          exit;
        end;
      end;
      Memo1.Lines.Add('Es wurden '+IntToStr(filesuf.count)+' Dateien gefunden...');
    end
    else
    begin
      exit;
    end;
  finally
    temp.Free;
    tmpfile.Free;
    ExtensionTest;
    Application.ProcessMessages;
  end;
end;


Natürlich musst du den Code weiterverarbeiten und sämtliche sachen rauskürzen. Achja, wer sich wundert, warum am ende der Datei ein Aufruf der Prozedur Extensiontest steht, dem sei gesagt, dass das programm eigentlich dafür war, alle links aus einer HTML-seite mit einer bestimmten extension herunterzuladen.

naja, ich hoffe dir hilft der code. :wink:

_________________
Viele Grüße
Jakob
webrage Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 29.08.02 20:05 
Titel: problem
ich drehe hier bald durch, ich habs folgendemassen:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TForm1.startClick(Sender: TObject); 
var 
source,S :string; 
cnt, i :integer; 
begin 
start.enabled:=false; 
HTMLParser1.Html.Clear; 
lb.Clear; 
NMHTTP1.Get(surl.Text); 
source:= lowercase(NMHTTP1.Body); 
lb.Items.Add(source); 
HTMLParser1.html.Add(source); 
HTMLParser1.Execute; 
lb.Items.Assign(HTMLparser1.Parsed.Hyperlinks); 

cnt:=lb.Items.Count; 
I:=0; 
with lb do begin 
while i < cnt do begin 
S := Items[i]; 
Inc(i); 
while (i < cnt) and (Items[i] = S) do begin 
Items.Delete(i); 
Dec(cnt); 
end; 
end; 
end; 

status.Text:=('Es wurden '+inttostr(lb.Items.Count)+' Links eingelesen.'); 
anz.Caption:='Gesammelte Links: '+inttostr(lb.Items.Count); 
start.enabled:=true; 
end;

Das Problem ist das die doppelten Einträge nicht korrekt gefiltert werden.
Wenn ich aber den Teil zum Filtern:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
cnt:=lb.Items.Count; 
i:=0; 
with lb do begin 
while i < cnt do begin 
S := Items[i]; 
Inc(i); 
while (i < cnt) and (Items[i] = S) do begin 
Items.Delete(i); 
Dec(cnt); 
end; 
end; 
end;

hinter einen extra button lege funktioniert es einwandfrei, das bedeutet wenn ich es in einer Prozedur nachheinander machen lasse gehts nich und wenn ich es auf Knopfdruck mache gehts ?!?

Hat einer Idee was das sein könnte ?
webrage Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 29.08.02 20:08 
Titel: habe gearde
festgestellt das wenn ich den oberen teil wie folgt ändere die Filterung funzt:
ausblenden Quelltext
1:
2:
3:
4:
5:
HTMLParser1.html.Add(source);
HTMLParser1.Execute;
lb.Clear;
lb.Sorted:=true;
lb.Items.Assign(HTMLparser1.Parsed.Hyperlinks);

hat einer ne erklärung ?