Autor Beitrag
Sithlord
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: Mo 27.04.09 13:30 
Hallo Mitglieder,

habe ein Problem:
Ich möchte eine HTML Tabelle auslesen, deren Links sowie sonstige Textteile in Delphi anzeigen lassen.

Wie gehe ich sowas an, ich habe mich damit noch nie beschäftigt und wüsste jetzt auch durch suchen nicht, wie.
Es muss ja kein Komplett fertiger Code sein ;=)

Danke euch,

mfg Kalle

P.S. Die Delphi titelsuche gab mir schon folgendes:
www.delphi-forum.de/...tml+tabelle+auslesen
Aus dem werde ich auch schlau, habe aber zum bsp:
-Spalte1--Spalte2--Spalte3
-myname?--myhouse--mylink?

und dann nicht nur ein Datensatzt, sondern mehrere, also fast beliebig viele ;)
Ein neues Problem wirft sich mir auf:
ein Link muss auch mit übernommen werden.
Wäre nett, wenn ihr mir da beistehen könntet!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 27.04.09 13:39 
Ich habe das vor kurzem für mein Periodensystem gebraucht um Daten aus Wikipedia auszulesen. Da ich keinen kompletten Parser integrieren wollte, habe ich das schnell selbst gebastelt. Hier der entsprechende (nicht besonders optimale, aber einfache) Quelltext:
ausblenden Delphi-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:
  // Entfernt alle Tags aus AText
  function CleanData(AText: String): String;
  begin
    Result := AText;
    while Pos('<', Result) > 0 do
      Delete(Result, Pos('<', Result), Pos('>', Result) - Pos('<', Result) + 1);
  end;

  // Sucht das nächste Tabellenzellen-Tag und extrahiert dessen Inhalt
  function GetNextData(var AText, AName, AValue: String): Boolean;
  begin
    Result := False;
    if Pos('<td', AText) = 0 then
      Exit;
    Delete(AText, 1, Pos('<td', AText) + 2);
    Delete(AText, 1, Pos('>', AText));
    if Pos('<td', AText) = 0 then
      Exit;
    AName := CleanData(Copy(AText, 1, Pos('</td>', AText) - 1));
    Delete(AText, 1, Pos('<td', AText) + 2);
    Delete(AText, 1, Pos('>', AText));
    AValue := CleanData(Copy(AText, 1, Pos('</td>', AText) - 1));
    Result := True;
  end;
GetNextData holt aus AText jeweils zwei <td>...</td> Tags (Beschriftung, Inhalt) heraus und gibt deren Inhalt in AName und AValue zurück. Ist keine Zelle mehr vorhanden, wird False zurückgegeben.

Im Zusammenhang findet du das in diesem Projekt:
www.delphi-forum.de/viewtopic.php?p=557541
in Source\Units\WikipediaElement.pas
Sithlord Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: Mo 27.04.09 13:44 
Danke dir, ich lasse die Frage erstmal offen, da ich erst wieder zuhause die Möglichkeit habe, Delphi zu starten ;)
Heut Abend teste ich es mal, ob es für meine Zwecke gebrauchbar ist.

So wie ich das aber jetzt sehe wird es bestimmt perfekt funktionieren ;)

Mfg Kalle

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Mhh, so ganz ist es noch nciht das, wie ich dachte...

immerhin liest er den code aus, und schickt ihn durch deinen Code.
Es kommt aber nicht das richtige heraus.
Vl. bin ich zu blöd bei Getnextdata(); das richtige reinzutun.
Mein String ist "datei".

Es sollen die ungelesenen Beiträge von pcfreunde.de ausgelesen werden.
Da ich aber als quellcode die ganze seite mit der tabelle habe und nicht
nur die tabelle, die ich benötige, stellt mich das vor einem noch größeren
problem.

Ich habe hoffentlich den quellcode der ganzen Tabelle angehängt ;)
Einloggen, um Attachments anzusehen!
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mo 27.04.09 17:19 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das vor kurzem für mein Periodensystem gebraucht um Daten aus Wikipedia auszulesen. Da ich keinen kompletten Parser integrieren wollte, habe ich das schnell selbst gebastelt. Hier der entsprechende (nicht besonders optimale, aber einfache) Quelltext:
ausblenden Delphi-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:
  // Entfernt alle Tags aus AText
  function CleanData(AText: String): String;
  begin
    Result := AText;
    while Pos('<', Result) > 0 do
      Delete(Result, Pos('<', Result), Pos('>', Result) - Pos('<', Result) + 1);
  end;

  // Sucht das nächste Tabellenzellen-Tag und extrahiert dessen Inhalt
  function GetNextData(var AText, AName, AValue: String): Boolean;
  begin
    Result := False;
    if Pos('<td', AText) = 0 then
      Exit;
    Delete(AText, 1, Pos('<td', AText) + 2);
    Delete(AText, 1, Pos('>', AText));
    if Pos('<td', AText) = 0 then
      Exit;
    AName := CleanData(Copy(AText, 1, Pos('</td>', AText) - 1));
    Delete(AText, 1, Pos('<td', AText) + 2);
    Delete(AText, 1, Pos('>', AText));
    AValue := CleanData(Copy(AText, 1, Pos('</td>', AText) - 1));
    Result := True;
  end;


Könntest du bitte deinen Quelltext genau kommentieren, möchte auch soetwas verwenden um Bilderlinks herauszufinden.

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.