Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Lyriker

Lyriker (Level 1) - Jetzt verbinden

23.10.2013, aktualisiert 17:57 Uhr, 2268 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 ..
Ähnliche Inhalte
Batch & Shell
Batch zum bearbeiten mehrerer CSV
Frage von Matzus87Batch & Shell3 Kommentare

Hallo Zusammen, ich bin neu hier und arbeite mich gerade in die Batch Programmierung ein. Ich sitze momentan an ...

Batch & Shell

CSV- Trennzeichen per Batch ändern für deutsches Excel

gelöst Frage von leknilk0815Batch & Shell14 Kommentare

Servus, ich bastle nun schon länger an einer Möglichkeit rum, die Delims in einer CSV- Datei (Wetterdaten) vom englischen ...

VB for Applications

CSV Datei automatisch bearbeiten und abspeichern

gelöst Frage von klaus1985VB for Applications6 Kommentare

Hallo , Ich habe hier jeden Monat eine CSV Datei die in unserem ERP System generiert wird und von ...

Batch & Shell

Powershell: Excel zu CSV - Trennzeichen ändern??

gelöst Frage von Timo0oBatch & Shell3 Kommentare

Moin! Wie bekomm ich die Powershell dazu, die Excel Tabelle nicht mit Komma, sondern mit Semikolon Trennzeichen als CSV ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 14 StundenHumor (lol)3 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 1 TagSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 1 TagMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...