Hallo,
erst einmal grüße ich alle. Ich bin ansonsten ein stiller Mitleser, aber manchmal packt es mich doch - wie in diesem Fall.
Ich kenne mich mit Batchdateien nicht so gut aus und ich glaube, dass das in dem Fall ganz schönes Gefrickel nötig wäre.
Aber ich habe einen anderen Lösungsansatz mit Python. Da ich nicht weiß, ob du lokale Adminrechte hast (Powershell-Rechte sind oft eine andere Geschichte), kannst du dir hier
https://sourceforge.net/projects/portable- python/ eine Version herunterladen die du nicht installieren musst.
Im Unterordner App\Python liegt der Pythoninterpretor python.exe. Dieser interpretiert die Pythondatei. Eventuell kannst du den Ordner in deinen Benutzpfad anlegen oder vorher den Pfad auf der Konsole temporär anpassen (path=D.\Portable Python-3.7.4\App\Python;%path%) <- zum Beispiel. Das hat den Vorteil, dass du von jedem Ordner aus den Interpreter aufrufen kannst.
Kopiere deine XML-Datei MeineDatei.xml in den Ordner des Python-Interpreters python.exe (wenn das mit dem Pfad nicht klappen sollte) und erstelle dort eine Pythondatei XML-Parser.py mit dem Inhalt:
Python:
import datetime
fh = open('MeineDatei.xml')
line_number = 0
found = False
name_line = "" #<utf8 name="name">MeinWert</utf8>
data_line = "" #<utf8 name="data">-3.20</utf8>
# Gehe Zeile fuer Zeile durch
for line in fh:
# print(line) <- Zum Testen
result = line.find("<utf8 name=\"name\">MeinWert</utf8>")
line_number +=1
if found == True:
data_line = line
break
if result > -1:
name_line = line
# Zeile mit name="name" gefunden
# Naechste Zeile enthaelt name="data"
found = True
fh.close()
# Ermitteln der Substring Positionen
# Position von der ersten spitzen schliessenden spitzen Klammer
pos1 = data_line.find(">")
pos1 +=1 #Inkrementieren
# Position vom schliessenden Tag
pos2 = data_line.find("</utf8>")
# Teil des data_string von pos1 bis pos2 extrahieren
data_substring = data_line[pos1:pos2]
# Dieselbe Prozedur um MeinWert zu extrahieren
pos1 = name_line.find(">")
pos1 +=1
pos2 = name_line.find("</utf8>")
name_substring = name_line[pos1:pos2]
print(name_substring)
print(data_substring)
cur_dt1 = datetime.datetime.today()
# Formatieren nach Muster
#d = Tag, m = Monat, y = Jahr, H = Stunde, M = Minute, S = Sekunde
dt_str1 = '{:%d/%m/%y %H:%M %S}'.format(cur_dt1)
print(dt_str1)
file = open("output.txt","w")
line_to_write = dt_str1 + " : " + name_substring+ " = " + data_substring
file.write(line_to_write)
file.close()
Wenn ich diese Datei aufrufe, bekomme ich folgenden Output:
Code:
c:\Users\Sebastian\Downloads\Portable Python-3.7.4\App\Python>python XML-Parser.py
MeinWert
-3.20
10/10/19 01:03 10
c:\Users\Sebastian\Downloads\Portable Python-3.7.4\App\Python>
Dies sind die Print-Anweisungen aus dem Quellcode. Schau im selben Ordner nach, in der dein Script liegt. Dort sollte dann eine Datei output.txt mit einer Zeile (10/10/19 00:47 23 : MeinWert = -3.20) liegen.
Einzige Bedingung die gelten muss, ist das die Zeilen direkt untereinander sind, da ansonsten wohl Murks herauskommt. Zudem muss die Funktion find auch fündig werden. Nach dem ersten Fund, bricht das Script das Parsen ab.
Ich weiß, dass man unter Python recht easy ist, XML zu lesen. Bin mir jedoch nicht sicher, ob das man das dann über pip erst herunterladen muss (Problem mit Proxy, usw). Und da ich Python-Anfänger bin wollte ich einfach etwas üben. Mein Steckenpferd ist normalerweise Qt/C++. Eine kompilierte exe war ja nicht gefragt und man hat es unter Qt/C++ nicht so leicht schnell mal den Code anzupassen und schnell laufen zu lassen.
Hoffe geholfen zu haben. Vielleicht kommt ja noch die eine oder andere Frage. Gute N8!