HTML Tabelle einlesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

HTML Tabelle einlesen

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HMLT Tabelle einlesen

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: HMLT Tabelle einlesen

Beitrag 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?
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HMLT Tabelle einlesen

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: HMLT Tabelle einlesen

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: HMLT Tabelle einlesen

Beitrag von STARGÅTE »

@kunstlust:

korrigiere doch bitte die Überschrift, da steht zur Zeit HMLT (Hybrid Machine Learning Tools) und nicht HTML (Hypertext Markup Language)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

HTML Tabelle einlesen

Beitrag von kunstlust »

Sorry Stargate, komischer Dreher...
Antworten