lyriker
Goto Top

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:
@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 ...

Content-ID: 207789

Url: https://administrator.de/contentid/207789

Ausgedruckt am: 25.11.2024 um 07:11 Uhr

Endoro
Endoro 10.06.2013 um 18:37:46 Uhr
Goto Top
Hi,

also bei mir klappt das so:

for /f "delims=" %%i in ('type file') do echo %%i  

Gruss!
Lyriker
Lyriker 11.06.2013 um 09:31:50 Uhr
Goto Top
sorry das habe ich nicht ganz verstanden...

was macht das 'type file' ??
Endoro
Endoro 11.06.2013 um 10:30:25 Uhr
Goto Top
Grob zusammengefasst gibt type eine Textdatei auf die Standard-Ausgabe, in diesem Fall die Forschleife, aus.
Also ganz ähnlich wie cat unter Unix.
Lyriker
Lyriker 11.06.2013 um 13:43:11 Uhr
Goto Top
Ich habe mich vielleicht falsch ausgedrückt, oder meine Kenntnisse sind gegenüber Deinem zu gering ;)

Das Script funktioniert Tadellos, sofern ich vorher die TXT-Dateien in UTf-8 umwandle.

Die Text Dateien, die mit mit UCS-2 Little Endian codiert sind, werden nicht ausgelesen und kann so nicht überarbeitet werden.

mit

for /f "delims=" %%i in ('type file') do echo %%i  

habe ich leider nichts erreicht.

Würdest das bitte nochmals für einen Blöden erklären, oder mit einem Beispiel zeigen?

Danke vielmals!
Endoro
Endoro 11.06.2013 um 13:57:43 Uhr
Goto Top
Wenn ich hier so ein UCS-2 Little Endian file habe, bekomme ich das so ausgelesen.

Du kannst deins ja mal irgendwo hochladen, an besten gepackt.
Dann kann ich es mir ansehen.
rubberman
rubberman 11.06.2013 aktualisiert um 18:26:28 Uhr
Goto Top
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.
for /f "delims=" %%i in ('type "meine_UCS-2_Datei.txt"') do echo %%i
... 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
Endoro
Endoro 11.06.2013 um 19:01:36 Uhr
Goto Top
Der Hexdump müsste etwa so aussehen:
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!
rubberman
rubberman 11.06.2013 um 19:20:11 Uhr
Goto Top
So sehe ich das auch face-wink
Lyriker
Lyriker 11.06.2013 um 21:17:14 Uhr
Goto Top
Ich würde gerne die Datei hochladen , müsste aber euch noch bitten, bis morgen zu warten. face-smile

Nach 10 Stunden tüfteln war ich wohl neben mir. Jetzt verstehe ich was das File heissen sollte. Teste das morgen mal aus danke face-smile
Lyriker
Lyriker 12.06.2013 aktualisiert um 11:14:53 Uhr
Goto Top
PS: Link zu den Dateien.. mit Type hatte ich leider (noch) keinen Erfolg
https://docs.google.com/file/d/0B5CvnhRm_yK_M0xwbXlHLTJfdkE/edit?usp=sha ...

Und ich habe leider keinen Einfluss auf die Quelle face-sad
Endoro
Endoro 12.06.2013 um 14:16:22 Uhr
Goto Top
Die Dateien haben dieses Format und sind mit type problemlos auzulesen. Ich bin nicht sicher, was du machst. Ich hab eine Kommandozeilensitzung mal auf Pastebin geladen: hier.

Also es ist zu schaffen face-smile

Gruss!
Lyriker
Lyriker 12.06.2013 um 14:58:58 Uhr
Goto Top
hm 4ter Beitrag, sorry

ok habe es nun verstanden, nur mit der vorgebenen Lösung funktionierte das nicht face-smile

ich habe es durch type in eine temporäre Datei lesen lasen, die ich nach dem transfer lösche..

aber danke für den Tip!

PS:

Hier die Lösung falls es jemand interessiert ;) :
@echo off & setlocal
set "Sammel=export/export.csv"  
type %battemp%>>r_%battemp%
set "Erste="  
for /f "delims=" %%i in ("r_%battemp%") do set "Erste=%%i"  
if not defined Erste goto :weiter
echo %Erste%
pause
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
echo test>>"%Sammel%"  
for /f "skip=6 usebackq tokens=* delims=|" %%i in ("r_%battemp%") do (  
	echo|set /p ="Stuerz;%DateiDatum%;">>"%Sammel%"  
	echo %%i >>"%Sammel%"  

)