Codepage bei TXT Datei vor Bearbeitung umwandeln - Befehlszeilentool oder
Hallo!
ich habe wieder mal Maschinendaten, die durch den Batch Mixer gejagt werden sollen.
Leider haben diese dafür aber das gänzlich falsche Format, die Dateien sind mit UCS-2 Little Endian codiert.
Kennt jemand eine Methode oder vielleicht auch ein Befehlszeilentool, das mir die Datei davor auf UTF-8 oder ähnlich Batch lesbares umwandelt?
Batch als Beispiel:
Hier zieht er sich die txt-Dateien:
Hier wertet er durch den Aufruf die Datei aus und schriebt Sie in eine Sammeldatei, lässt dabei die ersten 6 Zeilen aus:
Ein beispiel der Maschinendaten, die mir leider nur in UCS-2 Little Endian vorliegen:
Anlage:
einige der Dateien:
https://docs.google.com/file/d/0B5CvnhRm_yK_M0xwbXlHLTJfdkE/edit?usp=sha ...
ich habe wieder mal Maschinendaten, die durch den Batch Mixer gejagt werden sollen.
Leider haben diese dafür aber das gänzlich falsche Format, die Dateien sind mit UCS-2 Little Endian codiert.
Kennt jemand eine Methode oder vielleicht auch ein Befehlszeilentool, das mir die Datei davor auf UTF-8 oder ähnlich Batch lesbares umwandelt?
Batch als Beispiel:
Hier zieht er sich die txt-Dateien:
@echo off & setlocal
set "Dateien=*.txt"
set "Sammel=export/export.csv"
echo "Maschine;Datum;Zeit;ProOptID;Breite;Höhe;Stückzahl;Status">>"%Sammel%"
for /f " delims=" %%i in ('dir /b /od "%Dateien%"') do (
set "battemp=%%i"
call SendMadaStuerz.bat %battemp%
)
Hier wertet er durch den Aufruf die Datei aus und schriebt Sie in eine Sammeldatei, lässt dabei die ersten 6 Zeilen aus:
@echo off & setlocal
set "Sammel=export/export.csv"
set "Erste="
for /f "delims=" %%i in ("%battemp%") do set "Erste=%%i"
if not defined Erste goto :weiter
for /f "usebackq tokens=1* delims=: " %%i in ("%Erste%") do (
for /f "tokens=1,2" %%k in ("%%j") do (
set "reihe2=%%k"
echo %%k
set "DateiDatum=%%k"
goto :weiter
)
)
REM copy "%Erste%" "%Sammel%"
:weiter
for /f "skip=6 usebackq tokens=* delims=|" %%i in ("%battemp%") do (
echo|set /p ="Stuerz;%DateiDatum%;">>"%Sammel%"
echo %%i >>"%Sammel%"
)
Ein beispiel der Maschinendaten, die mir leider nur in UCS-2 Little Endian vorliegen:
Datum: 20130411
Maschine: SE-2KPH-CNC, 5736
Herstellung: Stürtz Maschinenbau GmbH
Kunde:
Zeit;ProOptID;Breite;Höhe;Stückzahl;Status
04:12:00;0;0;0;0;Automatik stop
04:12:01;0;0;0;0;Maschine On
04:12:02;0;0;0;0;Not-Aus
04:19:48;0;0;0;0;Automatik start
04:27:08;0;10250;20900;349201;
04:30:37;0;10250;20900;349202;
04:32:14;0;9000;21500;349203;
04:33:58;0;6700;4500;349204;
04:35:24;0;6700;4500;349205;
04:36:36;0;20900;16900;349206;
04:40:50;0;13850;18550;349207;
04:42:15;0;13750;18530;349208;
04:43:22;0;13850;18550;349209;
04:47:02;0;13750;18520;349210;
Anlage:
einige der Dateien:
https://docs.google.com/file/d/0B5CvnhRm_yK_M0xwbXlHLTJfdkE/edit?usp=sha ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 207789
Url: https://administrator.de/contentid/207789
Ausgedruckt am: 25.11.2024 um 07:11 Uhr
12 Kommentare
Neuester Kommentar
File ist englisch für Datei. Endoro setzt voraus, dass du "file" durch den Name deiner UCS-2 Datei ersetzt oder eben durch eine Variable, die den Name repräsentiert.
... wenn sie denn so heißen sollte. Ein Blick in die Hilfe zu TYPE hätte dir das aber längst verraten ...
BTW: eine Umwandlung von UCS-2 in UTF-8 ist mit Batch nicht möglich (mit VBScript schon), da entsprechende Codepages keinen vollständigen Support bieten. Wäre auch völlig unsinnig, denn UTF-8 enthält Kodierungen von Zeichen, wie Umlauten, die ohne TYPE wiederum nicht verarbeitbar sind. Hier müsstest du schon eine Codepage wählen, die nur maximal 1 Byte Breite pro Zeichen hat.
Grüße
rubberman
for /f "delims=" %%i in ('type "meine_UCS-2_Datei.txt"') do echo %%i
BTW: eine Umwandlung von UCS-2 in UTF-8 ist mit Batch nicht möglich (mit VBScript schon), da entsprechende Codepages keinen vollständigen Support bieten. Wäre auch völlig unsinnig, denn UTF-8 enthält Kodierungen von Zeichen, wie Umlauten, die ohne TYPE wiederum nicht verarbeitbar sind. Hier müsstest du schon eine Codepage wählen, die nur maximal 1 Byte Breite pro Zeichen hat.
Grüße
rubberman
Der Hexdump müsste etwa so aussehen:
Das ist problemlos mit
Gruss!
0000000: ff fe 44 00 61 00 74 00 75 00 6d 00 3a 00 20 00 ..D.a.t.u.m.:. .
0000010: 32 00 30 00 31 00 33 00 30 00 34 00 31 00 31 00 2.0.1.3.0.4.1.1.
0000020: 0d 00 0a 00 4d 00 61 00 73 00 63 00 68 00 69 00 ....M.a.s.c.h.i.
0000030: 6e 00 65 00 3a 00 20 00 53 00 45 00 2d 00 32 00 n.e.:. .S.E.-.2.
0000040: 4b 00 50 00 48 00 2d 00 43 00 4e 00 43 00 2c 00 K.P.H.-.C.N.C.,.
0000050: 20 00 35 00 37 00 33 00 36 00 0d 00 0a 00 48 00 .5.7.3.6.....H.
0000060: 65 00 72 00 73 00 74 00 65 00 6c 00 6c 00 75 00 e.r.s.t.e.l.l.u.
0000070: 6e 00 67 00 3a 00 20 00 53 00 74 00 fc 00 72 00 n.g.:. .S.t...r.
0000080: 74 00 7a 00 20 00 4d 00 61 00 73 00 63 00 68 00 t.z. .M.a.s.c.h.
0000090: 69 00 6e 00 65 00 6e 00 62 00 61 00 75 00 20 00 i.n.e.n.b.a.u. .
00000a0: 47 00 6d 00 62 00 48 00 0d 00 0a 00 4b 00 75 00 G.m.b.H.....K.u.
00000b0: 6e 00 64 00 65 00 3a 00 0d 00 0a 00 0d 00 0a 00 n.d.e.:.........
00000c0: 5a 00 65 00 69 00 74 00 3b 00 50 00 72 00 6f 00 Z.e.i.t.;.P.r.o.
00000d0: 4f 00 70 00 74 00 49 00 44 00 3b 00 42 00 72 00 O.p.t.I.D.;.B.r.
00000e0: 65 00 69 00 74 00 65 00 3b 00 48 00 f6 00 68 00 e.i.t.e.;.H...h.
00000f0: 65 00 3b 00 53 00 74 00 fc 00 63 00 6b 00 7a 00 e.;.S.t...c.k.z.
0000100: 61 00 68 00 6c 00 3b 00 53 00 74 00 61 00 74 00 a.h.l.;.S.t.a.t.
0000110: 75 00 73 00 0d 00 0a 00 30 00 34 00 3a 00 31 00 u.s.....0.4.:.1.
0000120: 32 00 3a 00 30 00 30 00 3b 00 30 00 3b 00 30 00 2.:.0.0.;.0.;.0.
Das ist problemlos mit
type
in ASCII umzuwandeln.Gruss!
Die Dateien haben dieses Format und sind mit
Also es ist zu schaffen
Gruss!
type
problemlos auzulesen. Ich bin nicht sicher, was du machst. Ich hab eine Kommandozeilensitzung mal auf Pastebin geladen: hier.Also es ist zu schaffen
Gruss!