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

Frage Entwicklung Batch & Shell

Mitglied: Lyriker

Lyriker (Level 1) - Jetzt verbinden

23.10.2013, aktualisiert 17:57 Uhr, 2257 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
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 13 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 18 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 18 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Blogs
Immer wiederkehrende PHP Fehlermeldung bei Wordpress UTF-8 - ASCII
gelöst Frage von vcdweltBlogs11 Kommentare

Hi, seit einiger Zeit wird mein error_log meines Wordpress Blogs mit immer der gleichen Fehlermeldung überschwemmt. 14-Dec-2017 08:18:05 UTC ...

Switche und Hubs
Redundante L2 LWL Leitung über 2 Standorte - Spanning Tree - HP Equipment
gelöst Frage von ResolvSwitche und Hubs10 Kommentare

Hallo, ich stehe vor der Herausforderung eine Redundante L2 LWL Leitung über 2 Standorte herzustellen. Grundsätzliches Switching Know How ...