| Autor |
Beitrag |
Sithlord
      
Beiträge: 172
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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: 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:
| function CleanData(AText: String): String; begin Result := AText; while Pos('<', Result) > 0 do Delete(Result, Pos('<', Result), Pos('>', Result) - Pos('<', Result) + 1); end;
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 
      
Beiträge: 172
|
Verfasst: 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 Narses: 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
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 27.04.09 17:19
jaenicke hat folgendes geschrieben : | 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: 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:
| function CleanData(AText: String): String; begin Result := AText; while Pos('<', Result) > 0 do Delete(Result, Pos('<', Result), Pos('>', Result) - Pos('<', Result) + 1); end;
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.
|
|
|