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, 2434 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
Per batch datei CSV auslesen
gelöst Frage von Newplay123Batch & Shell10 Kommentare

Hallo, ich will mit einer Batch dabei eine .csv datei auslesen. Dafür benutzt ich diesen Code: In der CSV ...

Batch & Shell

Batch Datei um eine CSV zu bearbeiten und umzuformatieren

gelöst Frage von BranpoBatch & Shell3 Kommentare

Guten Abend, ich habe eine CSV Liste die folgendermaßen aussieht: MYL: 92.18 TEVA: 91.51 LEG: 90.63 FLR: 88.74 GLD: ...

Batch & Shell

Per Batch eine Spalte in eine CSV Datei einfügen

gelöst Frage von mayli01Batch & Shell13 Kommentare

Hallo Forum :) Folgende Ausgangssituation. Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 ...

Batch & Shell

CSV kleinerer Wert (Batch)

Frage von jochengBatch & Shell3 Kommentare

Ich habe eine CSV Datei mit folgendem Inhalt: 29664;24,95 29664;12,95 29645;9,95 29645;9,95 29655;12,95 29655;24,95 29664;24,95 29655,12,95 29655,24,95 29664;12,95 29664;24,95 ...

Neue Wissensbeiträge
Humor (lol)
Preisvertipper
Information von Dilbert-MD vor 4 TagenHumor (lol)8 Kommentare

Moin! weil heute Freitag ist, zeige ich Euch den Preisvertipper der Woche: vergesst den Acer Predator 21x, der ist ...

Windows Update
Sicherheitsupdate für SQL Server 2014 SP3
Information von sabines vor 5 TagenWindows Update2 Kommentare

Für den SQL Server 2014 existiert ein Sicherheitsupdate. Laut KB Artikel wird es als CU3 angezeigt: Server 2014 SP3 ...

Backup

Veeam Agent für MS Windows - neue Version verfügbar (bedingt jedoch offenbar .NET Framework 4.6)

Information von VGem-e vor 6 TagenBackup1 Kommentar

Moin Kollegen, einer unserer Server zeigte grad an, dass für o.g. Software ein Update verfügbar ist. Ob ein evtl. ...

Python

Sie meinen es ja nur gut - Microsoft hilft python-Entwicklern auf unnachahmliche Weise

Information von DerWoWusste vor 8 TagenPython2 Kommentare

Stellt Euch vor, Ihr nutzt python unter Windows 10 und skriptet damit regelmäßig Dinge. Nach dem Update auf Windows ...

Heiß diskutierte Inhalte
Windows Server
Lange Wartezeiten beim speichern und öffnen auf Win Server 2019
Frage von installerWindows Server46 Kommentare

Hallo, habe ein Problem mit langen Wartezeiten beim öffnen / speichern von Office Dokumenten etc. auf Netzlaufwerken auf einem ...

LAN, WAN, Wireless
Durchblick im Ubiquiti Dschungel
Frage von installerLAN, WAN, Wireless26 Kommentare

Hallo, ich möchte gerne ein Wohnhaus mit Ubiquiti WLAn Access Points (inkl. Mesh Funktion) austatten und auch eine grafische ...

Utilities
TeamViewer - Software installieren mit Admin Account
Frage von gwitzigUtilities26 Kommentare

Hallo, ich bin bei einem Großkunden und muss einen Hotfix (Windows 7 Notebook) installieren. Habe es mit TeamViewer Version ...

Grafikkarten & Monitore
Server mit extra Graphikkarte
gelöst Frage von EuroPCGrafikkarten & Monitore18 Kommentare

Moin, ich habe hier ein Angebot unseres IT- Dinstleisters über einen Server mit Xeon E2176G Prozessor. Laut Intel hat ...