Windows Batch zum Lesen von TXT und zum Analysieren von Zeilen in JSON

1971
Koen De Couck

Durch das Durchsuchen dieser Website und das Erlernen der lächerlichen Sprache des Windows-Batch-Skripts bin ich ein gutes Stück vorangekommen, aber ehrlich gesagt stecke ich fest. Das Beispiel unten stammt aus dem alten Radiomodul unseres Labors, das seine Daten regelmäßig als TXT-Dateien protokolliert. Ich versuche, sie in richtiges JSON zu analysieren. Die Idee ist, eine .bat-Datei zu haben, die regelmäßig ausgeführt werden kann, um alle TXT-Protokolle in einem bestimmten Ordner in das JSON-Format zu ändern.

Einige der Gründe, warum ich Probleme habe, sind: der lange Header, die irrelevanten 'PRODUKTE' oder 'MFRSR' im Header, die irrelevanten Einheiten im Header, die inkonsistenten Trennzeichen zwischen den Werten, der komische '* 5'-Wert für null (die in diesem Fall nur Null sein kann) und die Tatsache, dass die Daten 3 weitere Spalten enthalten, dann die Kopfzeile (die ersten 3 Werte sind in der Tat eine alte Tabellenkalkulation für die Zeit).

*.TXT:

PRODUCES MFRSR Detector Temp, degC HTR V, V MFRSR Thermopile Total, W/m^2 MFRSR 414.0nm Total, (W/m^2)/nm MFRSR 496.6nm Total, (W/m^2)/nm MFRSR 613.0nm Total, (W/m^2)/nm MFRSR 670.9nm Total, (W/m^2)/nm MFRSR 869.3nm Total, (W/m^2)/nm MFRSR 937.6nm Total, (W/m^2)/nm MFRSR Thermopile Diffuse, W/m^2 MFRSR 414.0nm Diffuse, (W/m^2)/nm MFRSR 496.6nm Diffuse, (W/m^2)/nm MFRSR 613.0nm Diffuse, (W/m^2)/nm MFRSR 670.9nm Diffuse, (W/m^2)/nm MFRSR 869.3nm Diffuse, (W/m^2)/nm MFRSR 937.6nm Diffuse, (W/m^2)/nm MFRSR Thermopile DirNorm, W/m^2 MFRSR 414.0nm DirNorm, (W/m^2)/nm MFRSR 496.6nm DirNorm, (W/m^2)/nm MFRSR 613.0nm DirNorm, (W/m^2)/nm MFRSR 670.9nm DirNorm, (W/m^2)/nm MFRSR 869.3nm DirNorm, (W/m^2)/nm MFRSR 937.6nm DirNorm, (W/m^2)/nm  42099 0.29236 -0.55603 45.20 7.4819 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 *5 42099 0.57222 0.01180 45.20 7.8285 0.9378 0.0086 0.0086 0.0032 0.0040 0.0018 0.0005 0.9473 0.0093 0.0086 0.0032 0.0040 0.0018 0.0005 -0.8090 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 42099 0.57291 0.01415 45.20 7.8382 1.3587 0.0093 0.0086 0.0032 0.0040 0.0018 0.0005 1.3725 0.0093 0.0086 0.0032 0.0040 0.0023 0.0005 -0.9770 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 42099 0.57361 0.01656 45.20 7.8998 2.6372 0.0099 0.0100 0.0032 0.0040 0.0023 0.0005 2.6641 0.0099 0.0100 0.0032 0.0040 0.0023 0.0005 -1.6210 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 

* .json:

PRODUCES1 = { Id: 42099029236 X: -0.55603  DetectorTemp: 45.20, HTRV: 7.4819, ThermopileTotal: 0.0000, 414Total: 0.0000, 496Total: 0.0000, 613Total: 0.0000, 670Total: 0.0000, 869Total: 0.0000, 937Total: 0.0000, ThermopileDiffuse: 0.0000, 414Diffuse: 0.0000, 496Diffuse: 0.0000, 613Diffuse: 0.0000, 670Diffuse: 0.0000, 869Diffuse: 0.0000, 937Diffuse: 0.0000, ThermopileDirNorm: 0.0000, 414DirNorm: 0.0000, 496DirNorm: 0.0000, 613DirNorm: 0.0000, 670DirNorm: 0.0000, 869DirNorm: 0.0000, 937DirNorm: 0.0000 }; PRODUCES2 = { Id: 42099057222  X: -0.55603  DetectorTemp: 45.20, HTRV: 7.8285, ThermopileTotal: 0.9378, 414Total: 0.0086, 496Total: 0.0086, 613Total: 0.0032, 670Total: 0.0040, 869Total: 0.0018, 937Total: 0.0005, ThermopileDiffuse: 0.9473, 414Diffuse: 0.0093, 496Diffuse: 0.0086, 613Diffuse: 0.0032, 670Diffuse: 0.0040, 869Diffuse: 0.0018, 937Diffuse: 0.0005, ThermopileDirNorm: -0.8090, 414DirNorm: 0.0000, 496DirNorm: 0.0000, 613DirNorm: 0.0000, 670DirNorm: 0.0000, 869DirNorm: 0.0000, 937DirNorm: 0.0000 }; 

Gibt es jemanden, der Batch kennt und mich anfangen kann?

1
Nachdem Sie ein wenig Text in Batch geparst haben, empfehle ich Ihnen dringend, eine andere Sprache für Ihren eigenen Verstand zu wählen. Dieses Beispiel ist zwar gültiges JavaScript, aber kein gültiger JSON-Code. grawity vor 9 Jahren 1
Ich muss zustimmen. Sie können Batch in die Textverarbeitung überführen, aber es macht nie Spaß. Ich würde AWK als mögliches Werkzeug für die Verarbeitung vorschlagen. GuitarPicker vor 9 Jahren 0
Danke Leute. Mm, ich bin so begeistert, in AWK zu schauen wie Batch. Wie wäre es mit einer vereinfachten Version des Problems, bei der nur die gesamte Kopfzeile gelöscht wird, Leerzeichen für Tabulatoren ersetzt werden, Tabulatoren für Kommas ersetzt werden und schließlich alle doppelten Kommas gelöscht werden? Kann ich so etwas in Batch machen? Koen De Couck vor 9 Jahren 0
Bearbeiten: Eine neue Frage für eine (einfachere?) Csv-Implementierung wurde geöffnet: http://superuser.com/questions/899834/windows-batch-to-read-txt-and-parse-lines-to-csv Koen De Couck vor 9 Jahren 0
Verwenden Sie keine Charge dafür, um der Vernunft willen. Journeyman Geek vor 9 Jahren 0

1 Antwort auf die Frage

0
STTR

Powershell V4:

gc .\data.csv | ConvertTo-Json | sc .\data.json 

Powershell V4, V3:

Verwenden von PowerShell für die dynamische JSON-Analyse

ConvertTo-Json

Powershell V2:

Lesen Sie das Json-Objekt in Powershell 2.0

Aber im Allgemeinen denke ich, dass man die Daten in xml mit der Wetterstation abrufen kann ...