skeppi
Goto Top

Extrahieren von gleichen Codeteilen aus einer Vielzahl ähnlicher HTML-Dateien und Weiterverarbeitung in Excel

Hallo allerseits,

vorweg: meine Frage ist ähnlich zu einer erst kürzlich beantworteten, aber mir wurde nahegelegt einen neuen Thread aufzumachen. Trotzdem verlinke ich das mal, da es evt. hilfreich sein könnte: Daten aus txt-Files sammeln

Hier mein Problem:

Ich habe mir eine Batch geschrieben, die mittels wget alle 10 Minuten ein Image von einer Website lädt und als "nameTT.MM.JJJJHH.MM.SS.html" speichert (dafür hat mein Können noch gereicht face-smile ). Die Dateinamen sind nicht exakt gleich lang da sowohl

"size11.03.2017 9-50-30.html" (mit leerzeichen) als auch
"size11.03.201710-00-30.html" (ohne leerzeichen nach 10:00 uhr) rausgekommen sind. Falls man da die Batch abändern muss damit das funktioniert, bin ich da natürlich dabei.

In jeder dieser Dateien existiert nun ein eindeutig identifizierbarer Block namens <span class="text-large" id="quote_size">SIZE</span>, wovon ich die SIZE in Abhängigkeit von Datum und Uhrzeit des Dateinamens in Excel weiterverarbeiten / plotten muss.

Ideal als Output wäre meines Erachtens eine CSV-Datei jeweils mit Datum, Uhrzeit, SIZE pro Input-Datei und Zeile.

Ein Mitglied von administrator.de hat mir bereits einen Lösungsvorschlag geschickt, dieser funktioniert jedoch nicht und ich bin nicht in der Lage rauszufinden warum.

Der Code:
gci 'c:\ordner\*.html' | ?{(gc $_.Fullname -Raw) -match '<span class="text-large" id="quote_size">(.*?)</span>'} |%{$m = [regex]::match($_.Basename,'([\d\.]+) ([\d\.]+)'); [pscustomobject] @{Datum=$m.Groups[1].Value;Zeit=$mGroups[2].Value;Size=$matches[1].Trim()}} | export-csv 'c:\ordner\ergebnis.csv' -Delimiter ";" -NoType -Encoding UTF8  

Die daraus resultierende Fehlermeldung:
Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
In Zeile:1 Zeichen:187
+ ... [\d\.]+)'); [pscustomobject] @{Datum=$m.Groups[1].Value;Zeit=$mGroups ...  
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : NullArray

Vielen vielen Dank im Voraus!!

PS: Ich hoffe ich habe das richtige Subforum getroffen ^^

Content-ID: 331882

Url: https://administrator.de/forum/extrahieren-von-gleichen-codeteilen-aus-einer-vielzahl-aehnlicher-html-dateien-und-weiterverarbeitung-in-331882.html

Ausgedruckt am: 22.12.2024 um 12:12 Uhr

colinardo
Lösung colinardo 11.03.2017 aktualisiert um 15:49:19 Uhr
Goto Top
Ich habe mir eine Batch geschrieben, die mittels wget alle 10 Minuten ein Image von einer Website lädt und als "nameTT.MM.JJJJHH.MM.SS.html" speichert (dafür hat mein Können noch gereicht ). Die Dateinamen sind nicht exakt gleich lang da sowohl

"size11.03.2017 9-50-30.html" (mit leerzeichen) als auch
"size11.03.201710-00-30.html" (ohne leerzeichen nach 10:00 uhr) rausgekommen sind. Falls man da die Batch abändern muss damit das funktioniert, bin ich da natürlich dabei.

Tja, kein Wunder wenn deine Ursprungsschilderung nur mit der Angabe von
nameTT.MM.JJJJ HH.MM.SS.html
nunja vollkommen falsch war face-wink
Zusätzlich gibst du dort nämlich zwischen der Zeit Punkte statt Bindestrichen an, wer soll dir da sofort den richtigen Code liefern face-smile.

In dem Fall also:

gci 'c:\ordner\*.html' | ?{(gc $_.Fullname -Raw) -match '<span class="text-large" id="quote_size">(.*?)</span>'} |%{  
    $m = [regex]::match($_.Basename,'(\d{1,2}\.\d{1,2}\.\d{4}) ?(\d{1,2}[:\.-]\d{1,2}[:\.-]\d{1,2})');  
    if($m.Success){
        [pscustomobject] @{Datum=$m.Groups[1].Value;Zeit=$m.Groups[2].Value;Size=$matches[1].Trim()}
    }else{
        write-host "Dateiname '$($_.Name)' entspricht nicht den Vorgaben!" -F Yellow  
    }
} | export-csv 'c:\ordner\ergebnis.csv' -Delimiter ";" -NoType -Encoding UTF8  
Das nächste mal also bitte präzise Angaben liefern. Programmierung steht und fällt nunmal von exakten Angaben.

Grüße Uwe
skeppi
skeppi 11.03.2017 aktualisiert um 15:58:21 Uhr
Goto Top
Oh Gott, sorry dafür face-sad

Hat aber leider nicht geholfen. Die Fehlermeldung besteht weiterhin (und kommt beim Ausführen dutzende Male, wahrsch. für jede einzelne Datei):

Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
In Zeile:4 Zeichen:9
+         [pscustomobject] @{Datum=$m.Groups[1].Value;Zeit=$mGroups[2]. ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : NullArray

Kann es damit zu tun haben, dass die Size ein Dollarsymbol enthält? Es handelt sich nämlich um eine Marktkapitalisierung in $ der Form $xxx,xxx.xx
colinardo
colinardo 11.03.2017 aktualisiert um 16:07:42 Uhr
Goto Top
Tippfehler, hat nur ein Punkt zwischen Variable und Eigenschaft gefehlt, sorry Ist oben korrigiert.
Bin aktuell nur am Smartphone face-wink
skeppi
skeppi 11.03.2017 um 16:10:07 Uhr
Goto Top
Läuft. Jedoch ist das CSV-Sheet leer.
colinardo
colinardo 11.03.2017 aktualisiert um 16:14:23 Uhr
Goto Top
Dann stimmt die Angabe deines HTML-Tags nicht exakt! Geht nämlich testweise hier einwandfrei.
Schick mir eine/zwei deiner original HTML-Dateien zu bitte.
skeppi
skeppi 11.03.2017 um 16:15:58 Uhr
Goto Top
Mittlerweile funktioniert es. Da hatte wohl noch besagter Punkt gefehlt. Vielen vielen vielen Dank!!!
colinardo
colinardo 11.03.2017 aktualisiert um 16:19:58 Uhr
Goto Top
Alles klar.

Schönes Wochenende
Grüße Uwe

Bitte den Beitrag dann noch als gelöst markieren. Merci.