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...