Seite 1 von 1
HTML Tabelle einlesen
Verfasst: 18.10.2012 10:15
von kunstlust
Ich bin auf der Suche, nach einer Möglichkeit eine HTML Tabellen einzulesen. Das Problem ist zu einem, das die Seiten nicht immer zu 100% gleich sein sind und das die Werte nicht immer die gleiche Länge haben. Ich wollte mir die HTML Datei herunterladen und danach per FindString mir die Daten suchen, das klappt aber eben nur mit festen Längen gut, also bleibt nur CreateRegularExpression was durch seine Mächtigkeit leider auch anfällig ist, habt ihr schon mal eine solche Problem in anderen Zusammenhang gelöst, vielleicht eine Tabelle erstmals zu reduzieren und danach suchen? Ich bin für jede Idee Dankbar
Titel korrigiert --Andesdaf
Re: HMLT Tabelle einlesen
Verfasst: 18.10.2012 10:40
von Kiffi
wenn es sauber geschriebenes HTML (XHTML) ist, kannst Du versuchen, die
Tabelle als XML zu laden und mit XMLNodeFromPath() & Co auszulesen.
Grüße ... Kiffi
Re: HMLT Tabelle einlesen
Verfasst: 18.10.2012 11:17
von kunstlust
Hallo Kiffi,
ich bin ja immer in "Sachen Drucker unterwegs". Webserver ist von 1995 oder so, da habe ich klaube ich keine Chance. ich habe mal wieder ein Beispiel aus AutoIT, das ist das ganz Einfach....
Code: Alles auswählen
#include <IE.au3>
#include <array.au3>
Local $url = 'http://192.168.110.211/ssi/xprtutil.htm'
Local $oIE = _IECreate($url, 0, 0)
Local $oTable = _IETableGetCollection($oIE, 6)
Local $array = _IETableWriteToArray($oTable, True)
_ArrayDisplay($array)
_IEQuit($oIE)
Das sieh so aus:
Code: Alles auswählen
[0]|Controller-Version|11.XXX
[1]|BSP-Version|HXXXXXXX
[2]|Akt. Benutzer-Einstellung|0
[3]|Festplatte|Aktuell (76319 MB)
[4]|Diskettenlaufwerk|Kein
[5]|Speicher(Megabyte)|512
[6]|NIC Firmware-Revision|Kein
[7]|NIC Hardware-Adresse|Kein
[8]|Erweiterte Netzwerk-Adresse|00:XX
[9]|Erweiterter Netzwerk-Status|BEREIT
[10]|Hauptinstall.schlüssel (KIK)|742-XXXXX
[11]|Scanner-Typ|XEROX WIDE FORMAT
[12]|Scanner Hardware-Adresse|26:XXXX
[13]|Scanner-Version|3.5.10XXXX
[14]|IOT Hardware-Adresse|00:XXX
[15]|IOT-Version|03.XXXX
[16]|Blink-Format|0 MB
geht das in PB auch irgendwie?
Re: HMLT Tabelle einlesen
Verfasst: 18.10.2012 12:19
von Kiffi
kunstlust hat geschrieben:geht das in PB auch irgendwie?
joh. Mal auf die Schnelle hingeschlurt:
Code: Alles auswählen
IncludePath "[DeinPfadZu]\COMatePLUS\"
XIncludeFile "COMatePLUS.pbi"
EnableExplicit
#frmMain = 0
#frmMain_WebGadget = 0
Define WB.COMateObject
Define Tabelle.COMateObject
Define Row.COMateObject
Define Cell.COMateObject
Define AnzahlTabellen, TabellenZaehler
Define AnzahlZeilen, ZeilenZaehler
Define AnzahlSpalten, SpaltenZaehler
NewMap HtmlTableMap.s()
If OpenWindow(#frmMain, 0, 0, 0, 0, "", #PB_Window_Invisible)
WebGadget(#frmMain_WebGadget, 0, 0, 0, 0, "http://www.purebasic.fr/german/viewtopic.php?f=3&t=25989")
; make sure that the page was completely loaded
Repeat
While WindowEvent() : Delay(1) : Wend
If GetGadgetAttribute(#frmMain_WebGadget, #PB_Web_Busy) = 0 : Break : EndIf
ForEver
WB = COMate_WrapCOMObject(GetWindowLong_(GadgetID(#frmMain_WebGadget), #GWL_USERDATA))
If WB
AnzahlTabellen = WB\GetIntegerProperty("document\GetElementsByTagName('table')\length")
;Debug "Anzahl Tabellen: " + Str(AnzahlTabellen)
For TabellenZaehler = 0 To AnzahlTabellen - 1
;Debug "Tabelle: " + Str(TabellenZaehler)
Tabelle = WB\GetObjectProperty("document\GetElementsByTagName('table')\Item(" + Str(TabellenZaehler) + ")")
If Tabelle
AnzahlZeilen = Tabelle\GetIntegerProperty("rows\length")
;Debug "Anzahl Zeilen: " + Str(AnzahlZeilen)
For ZeilenZaehler = 0 To AnzahlZeilen - 1
;Debug "Zeile: " + Str(ZeilenZaehler)
Row = Tabelle\GetObjectProperty("rows\item(" + Str(ZeilenZaehler) + ")")
If Row
AnzahlSpalten = Row\GetIntegerProperty("cells\length")
For SpaltenZaehler = 0 To AnzahlSpalten - 1
Cell = Row\GetObjectProperty("cells\item(" + Str(SpaltenZaehler) + ")")
If Cell
HtmlTableMap("T" + Str(TabellenZaehler+1) + "R" + Str(ZeilenZaehler+1) + "C" + Str(SpaltenZaehler+1))=Cell\GetStringProperty("innerText")
Cell\Release()
EndIf
Next
Row\Release()
EndIf
Next
Tabelle\Release()
EndIf
Next
WB\Release()
EndIf
EndIf
Debug HtmlTableMap("T21R1C1")
HtmlTableMap("T21R1C1") gibt hier den Inhalt der ersten Spalte (
Cell) der ersten Zeile (
Row) der 21ten Tabelle (
Table) aus.
Grüße ... Kiffi
Re: HMLT Tabelle einlesen
Verfasst: 18.10.2012 14:54
von kunstlust
Hallo Kiffi,
das ist ein toller Ansatz, dachte mir das es über die COM gehen müssen. Danke in jedem Fall für die Hilfe, darauf kann ich bauen.
Gruß Lars
Re: HMLT Tabelle einlesen
Verfasst: 18.10.2012 15:04
von STARGÅTE
@kunstlust:
korrigiere doch bitte die Überschrift, da steht zur Zeit HMLT (Hybrid Machine Learning Tools) und nicht HTML (Hypertext Markup Language)
HTML Tabelle einlesen
Verfasst: 18.10.2012 17:44
von kunstlust
Sorry Stargate, komischer Dreher...