Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CSV Datei per Batch bearbeiten, CR, dazu Exponentialformat in Datenzeile und leere Daten zwischen Trennzeichen also ein -for- Problem

Frage Entwicklung Batch & Shell

Mitglied: Lyriker

Lyriker (Level 1) - Jetzt verbinden

23.10.2013, aktualisiert 17:57 Uhr, 2213 Aufrufe, 6 Kommentare

Hallo!

wiedermal ich mit meinen Maschinendaten...

zuerst mal die Quelldatei, damit wir wissen um was es geht:

01.
  
02.
* Tag;Monat;Jahr;Uhrzeit;Maschinenummer;Ereigniscode;Fehlercode;Artikelnummer;Belegungsplatz;Losname;laufende Teilenummer im Los;Oeffnungsnummer;Stabnummer;Teilemass1;Teilemass2;Zeit 
03.
 
04.
26;9;2013;6:21:43:926;330030;11;;;;;;;;;;2616;Teil ist jetzt am Einlauf; 
05.
26;9;2013;6:21:52:358;330030;1;;757270120001;;;;;;1220.0;730.0;;Eintakten des Teils; 
06.
26;9;2013;6:22:26:66;330030;19;;757270120001;;;;;;1220.0;730.0;1800;Austakten des Teils vom Bearbeitungsplatz; 
07.
26;9;2013;6:22:48:338;330030;10;;;;;;;;;;;Warte auf Teil am Einlauf der Maschine; 
08.
26;9;2013;6:30:25:405;330030;11;;;;;;;;;;455;Teil ist jetzt am Einlauf; 
09.
26;9;2013;6:30:32:486;330030;1;;737270030001;;;;;;580.26;987.02;;Eintakten des Teils; 
10.
26;9;2013;6:30:53:676;330030;19;;737270030001;;;;;;580.26;987.02;505;Austakten des Teils vom Bearbeitungsplatz; 
11.
26;9;2013;6:31:28:366;330030;1;;757270020001;;;;;;580.0;990.0;;Eintakten des Teils; 
12.
26;9;2013;6:31:49:526;330030;19;;757270020001;;;;;;580.0;990.0;55;Austakten des Teils vom Bearbeitungsplatz; 
13.
26;9;2013;6:32:23:515;330030;1;;757270060001;;;;;;520.0;970.0;;Eintakten des Teils; 
14.
26;9;2013;6:32:45:106;330030;19;;757270060001;;;;;;520.0;970.0;55;Austakten des Teils vom Bearbeitungsplatz; 
15.
26;9;2013;6:33:18:775;330030;1;;757270070001;;;;;;520.0;970.0;;Eintakten des Teils; 
16.
26;9;2013;6:33:40:396;330030;19;;757270070001;;;;;;520.0;970.0;55;Austakten des Teils vom Bearbeitungsplatz;
 
zwischen den einzelnen Zeilen sind dann nur CR also "Carriage return" oder "Wagenrücklauf", vielleicht hilft das ein wenig in der Fehlersuche.

Codierung der Dateien ist ANSI.

Dann will ich die einzelnen Zellen zu Token verarbeiten, (erste drei) das Datum zusammen setzen und die Zeit (Token 4) in ein SQL kompatibles Format bringen.

Mein Versuch:
01.
  
02.
@echo off & setlocal 
03.
 
04.
set "log_temp=D:\Lemuth\abgearbeitet\log_temp.csv" 
05.
set "Sammel=D:\Lemuth\export\export.csv" 
06.
set "log=D:\Lemuth\abgearbeitet\log.csv" 
07.
 
08.
for /f "skip=1 usebackq tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18* delims=;" %%A in (quelle.csv) do ( 
09.
	echo|set /p ="%date% ">>"%log_temp%" 
10.
	echo|set /p ="%time%~Lemuth~%%A-%%B-%%C~%%D">>"%log_temp%" 
11.
	echo|set /p ="~%%E~%%F~%%G~%%H~%%I">>"%log_temp%" 
12.
	echo ~%%J~%%K~%%L~%%M~%%N~%%O~%%P>>"%log_temp%" 
13.
	 
14.
)
 

Leider kommt dann Mist raus, und ich verstehe nicht warum:

01.
  
02.
23.10.2013 17:50:48,57~Lemuth~26-9-2013~6:21:43:926~330030~11~2616~Teil ist jetzt am Einlauf~26~9~2013~6:21:52:358~330030~1~757270120001~1220.0
 
Ich danke für jede erdenkliche Hilfe, wahrscheinlich bin ich wieder betriebsblind.
Mitglied: Endoro
23.10.2013 um 18:52 Uhr
Hi,
was ist denn die erwartete Ausgabe?
lg.
Bitte warten ..
Mitglied: Lyriker
24.10.2013, aktualisiert um 08:58 Uhr
01.
26-09-2013~6:21:43~330030~11~~~~~~~~~~2616~Teil ist jetzt am Einlauf~  
02.
26-09-2013~6:21:52~330030~1~~757270120001~~~~~~1220.0~730.0~~Eintakten des Teils~  
03.
06. 
04.
26-09-2013~6:22:26~330030~19~~757270120001~~~~~~1220.0~730.0~1800~Austakten des Teils vom Bearbeitungsplatz~  
05.
07. 
06.
26-09-2013~6:22:48~330030~10~~~~~~~~~~~Warte auf Teil am Einlauf der Maschine~  
07.
.....
Das sollte eigentlich raus kommen. Hier nochmal eine Quelldatei: GDriveDokument

Wie ich das Datum unwandle und die Zeit, ist für mich an sich kein Problem, was das Problem ist, das er die "leeren" Felder einfach überspringt?!
Vielleicht liegt das an der Tatsache, das die CSV nur einen Wagenrücklauf (CR) am ende der Zeile bietet und somit kein Zeilenvorschub (LF) hat um der Windows Nomierung CR/LF zu entsprechen?


Das nächste Problem ist die Artikelnummer, die in der CSV als Exponential nach Batchdurchlauf dargestellt wird.

Beste Grüße zurück und Danke für die Hilfe!
Bitte warten ..
Mitglied: Endoro
24.10.2013 um 09:09 Uhr
Hi,
die leeren Zellen werden übersprungen, weil dort Delimiter nebeneinander liegen.
Die Forschleife macht da aus allen einen draus.
lg.
Bitte warten ..
Mitglied: Lyriker
25.10.2013 um 15:32 Uhr
Ist sowas eventuell mit vb die man im batch aufruft realisierbar? Ich steh echt auf dem schlauch.. ;(
Bitte warten ..
Mitglied: Endoro
25.10.2013, aktualisiert um 19:18 Uhr
Zu VB kann ich nichts sagen. Du kannst aber den Teil der Zeichenkette, der Datum und Zeit enthaelt wie bisher und den Rest mit Stringmanipulation bearbeiten.
lg.

PS also etwa so:
01.
@ECHO OFF &SETLOCAL 
02.
set "CSVFile=136032_1_2592013.csv" 
03.
for /f "delims=" %%a in ('type "%CSVFile%"^|tr \r \n') do ( 
04.
	for /f "tokens=1-4*delims=;" %%b in ("%%~a") do ( 
05.
		set "cDate=%%d-%%c-%%b" 
06.
		set "cTime=%%e" 
07.
		set "line=%%f" 
08.
		SETLOCAL ENABLEDELAYEDEXPANSION 
09.
		set "cTime=!cTime:~0,8!" 
10.
		set "line=!line:;=~!" 
11.
		echo(!cDate!~!cTime!~!line! 
12.
		endlocal 
13.
14.
)
Damit dieser x13h Zeilenumbruch gelesen werden kann, hab ich das UNIX-Programm tr eingesetzt (CoreUtils for Windows).
lg.
Bitte warten ..
Mitglied: Lyriker
28.10.2013 um 15:10 Uhr
Hi,

nach bisschen mehr Hirnschmalzeinsatz meiner Seite und Forum forsten habe ich es mit einer VB Routine gelöst.

Das schöne an der Routine ist, er löst die falschen Umbrüche, ackert das File erst mal zu einem ordentlichen Format wandelt mir die Zahlen auch sauber um und gibt es sauber aus:
01.
Datei = "D:\Lemuth\vbs\136032_1_2592013.csv" 
02.
Delim = ";" 'Feldtrennzeichen 
03.
Dateineu = "D:\Lemuth\vbs\136032_1_2592013_test.csv" 
04.
Dateitemp = "D:\Lemuth\vbs\136032_1_2592013_tmp.csv" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
' Lese Quelle ein 
08.
sText = fso.OpenTextFile(Datei).ReadAll 
09.
' ersetze alle CrLf durch Cr 
10.
sText = Replace(sText, vbCrLf, vbCr) 
11.
' Ersetze alle Cr durch vbCrLf 
12.
sText = Replace(sText, vbCr, vbCrLf) 
13.
' schreibe Daten in temporäre Datei 
14.
fso.CreateTextFile(Dateitemp).Write sText 
15.
'Gesamten Dateiinhalt einlesen und zeilenweise aufgeteilt im Array T() ablegen 
16.
T = Split(fso.OpenTextFile(Dateitemp).ReadAll, vbCrLF) 
17.
Neu = "" 'Variable für berarbeiteten Dateiinhalt vorbereiten 
18.
'Zähle die Zeilen 
19.
zeilenzaehler = 0  
20.
'In einer Schleife alle Zeilen durchgehen 
21.
For Each Z In T 
22.
	'Überspringe die ersten zwei Zeilen 
23.
	if zeilenzaehler > 1 then  
24.
		'Zeile anhand des Trennzeichens aufteilen und im Array S() ablegen 
25.
		S = Split(Z, Delim) 
26.
		'Variable für Ausgabezeile löschen ... 
27.
		Aus = "" 
28.
		'Wenn zeile leer dann überspringen 
29.
		If Z = "" Then  
30.
			Else 
31.
			'gehe alle durch ; getrennten Felder 
32.
			For i = 0 To 16 
33.
				'msgbox(S(i)) 
34.
				Austmp = "" 
35.
				' wenn Zaehler = 0 dann schreibe Tag 
36.
				If i = 0 then 
37.
					Austemp = S(i) & "-" 
38.
				end if 
39.
				' wenn Zaehler = 1 dann schreibe Monat- 
40.
				If i = 1 then 
41.
					Austemp = Austemp & S(i)& "-" 
42.
				end if 
43.
				' wenn Zaehler = 2 dann schreibe Jahr- und in Aus(gabe) 
44.
				If i = 2 then 
45.
					Austemp = Austemp & S(i) 
46.
					Aus = Austemp 
47.
				end if 
48.
				' wenn Zaehler größer 3 dann schreibe normal weiter 
49.
				If i > 2 then 
50.
					'MSGbox([i]) 
51.
					Aus = Aus & Delim & S(i) 
52.
				end if 
53.
				'komische Zahl in echte Zahl wandeln 
54.
				If i = 14 then 
55.
					'msgbox(S(i)) 
56.
				end if 
57.
				'schreibe noch ein Feldtrenner dahinter 
58.
				If i = 16 then 
59.
					Aus = Aus & Delim 
60.
				end if 
61.
			Next 
62.
		end if 
63.
		'Fertige Ausgabezeile dem neuen Dateiinhalt nach einer Zeilenschaltung hinzufügen 
64.
		Neu = Neu & vbCrLf & Aus 
65.
	end if 
66.
'zähle die Zeilen und nun eine Zeile weiter 
67.
zeilenzaehler = zeilenzaehler+1 
68.
Next 
69.
'Neuen Dateiinhalt in alte Datei schreiben (diese dazu neu erstellen) 
70.
fso.CreateTextFile(Dateineu).Write Neu
Ergebnis:

01.
25-9-2013;10:24:16:679;136032;13;;;;;;;;;;13;Auslauf der Maschine ist jetzt frei; 
02.
25-9-2013;10:24:18:967;136032;19;;757150250102;;;;;;581000;0.0;72;Austakten des Teils vom Bearbeitungsplatz; 
03.
25-9-2013;10:24:27:348;136032;11;;;;;;;;;;13;Teil ist jetzt am Einlauf; 
04.
25-9-2013;10:25:14:58;136032;1;;756800220102;;;;;;706000;0.0;;Eintakten des Teils; 
05.
25-9-2013;10:25:15:157;136032;12;;;;;;;;;;;Warte das Auslauf der Machine frei; 
06.
25-9-2013;10:34:48:49;136032;13;;;;;;;;;;572;Auslauf der Maschine ist jetzt frei; 
07.
25-9-2013;10:34:49:378;136032;19;;757150210302;;;;;;656000;0.0;629;Austakten des Teils vom Bearbeitungsplatz; 
08.
25-9-2013;10:34:55:681;136032;1;;756800180200;;;;;;596000;0.0;;Eintakten des Teils; 
09.
25-9-2013;10:35:42:521;136032;19;;756800230102;;;;;;681000;0.0;53;Austakten des Teils vom Bearbeitungsplatz; 
10.
25-9-2013;10:35:48:515;136032;1;;756800200102;;;;;;916000;0.0;;Eintakten des Teils; 
11.
25-9-2013;10:36:38:702;136032;12;;;;;;;;;;;Warte das Auslauf der Machine frei; 
12.
25-9-2013;10:37:16:442;136032;13;;;;;;;;;;37;Auslauf der Maschine ist jetzt frei; 
13.
25-9-2013;10:37:17:640;136032;19;;756800220102;;;;;;706000;0.0;95;Austakten des Teils vom Bearbeitungsplatz; 
14.
25-9-2013;10:37:23:894;136032;1;;756800260102;;;;;;701000;0.0;;Eintakten des Teils; 
15.
25-9-2013;10:38:13:831;136032;12;;;;;;;;;;;Warte das Auslauf der Machine frei;
ein paar Sachen gefallen mir noch nicht, aber die kann ich ja noch ändern (das 0.0 zum Beispiel)
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...