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

Pro Zeile Logfile erzeugen, und bei nächsten Durchlauf der Vorlage Prüfen, ob es die Zeile schon gibt, aber wie?

Frage Entwicklung Batch & Shell

Mitglied: Lyriker

Lyriker (Level 1) - Jetzt verbinden

21.06.2013, aktualisiert 24.06.2013, 1351 Aufrufe, 6 Kommentare

Liebe Helfer,
habe hier wieder eine neue Maschine, deren Inhalt ich auch schon in eine gute Form bringe. Leider ist das Logfile ein Mist, weil die Maschine ununterbrochen in das File schreibt, und keine einzelnen Logs auswirft, und das Log einfach zwischendurch wieder die alten Zeilen löscht. Das heißt das ich jeden Tag einen Überhang habe, den ich natürlich nicht doppelt in die Datenbank pflegen will.

Deshalb wollte ich ein Art Log schrieben, der jede Zeile vorab prüft, ob es diese schon importiert hat.

als Identifier habe ich das Datum und die Uhrzeit (10.06.2013 16:34:01.530) erkoren, denn hier ist sicher gestellt, das diese die eindeutige Reihe der Daten erfasst.

Doch irgendwie... geht nüscht.

Beispiel:

Quelle:
01.
F : 10.06.2013 16:34:01.530  Msg.: 1100 FZ: 03:04:20:537 BZ: 05:52:10:419 SZ: 00:29:24:719 STZ:0314 STZ/h:0033.3 --> OK 
02.
T : 10.06.2013 16:34:35.779  Msg.: 0003 FZ: 03:04:54:786 BZ: 05:52:10:419 SZ: 00:29:24:719 STZ:0315 STZ/h:0033.4 --> Fertigmeldung --> {;X;39;0039;307910;007;020;002;000000101977;  0.0;1748;H;071305;010;1748.0;002/002;;;;;24;} / GR071305.asc 
03.
F : 10.06.2013 16:34:50.190  Msg.: 1203 FZ: 03:05:09:197 BZ: 05:52:10:419 SZ: 00:29:24:719 STZ:0315 STZ/h:0033.3 --> Keine Leisten eingelegt 
04.
T : 10.06.2013 16:34:56.198  Msg.: 0003 FZ: 03:05:09:197 BZ: 05:52:16:428 SZ: 00:29:24:719 STZ:0316 STZ/h:0033.4 --> Fertigmeldung --> {;X;80;0080;307910;007;019;002;000000101977;  0.0;485;H;071305;010;485.0;002/002;;;;;24;} / GR071305.asc 
05.
F : 10.06.2013 16:38:09.086  Msg.: 1102 FZ: 03:05:09:197 BZ: 05:55:29:315 SZ: 00:29:24:719 STZ:0316 STZ/h:0033.3 --> Notaus aktiv ( Notaus entriegeln + <I-Taster> ) 
06.
F : 10.06.2013 16:38:19.901  Msg.: 1103 FZ: 03:05:09:197 BZ: 05:55:29:315 SZ: 00:29:35:535 STZ:0316 STZ/h:0033.2 --> Keine Reglerfeigabe ( <Reset> ) 
07.
F : 10.06.2013 16:38:20.502  Msg.: 1301 FZ: 03:05:09:197 BZ: 05:55:29:315 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Bitte Ablauf starten ( <NC-Start> ) 
08.
F : 10.06.2013 16:38:29.515  Msg.: 1203 FZ: 03:05:09:197 BZ: 05:55:38:328 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Keine Leisten eingelegt 
09.
F : 10.06.2013 16:38:30.116  Msg.: 1305 FZ: 03:05:09:197 BZ: 05:55:38:928 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Leisten einlegen !!! 
10.
F : 10.06.2013 16:38:33.120  Msg.: 1304 FZ: 03:05:09:197 BZ: 05:55:41:933 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Leiste einlegen und starten ( <NC-Start> ) 
11.
F : 10.06.2013 16:38:46.940  Msg.: 1100 FZ: 03:05:09:197 BZ: 05:55:55:753 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> OK 
12.
F : 10.06.2013 16:39:10.975  Msg.: 1203 FZ: 03:05:33:231 BZ: 05:55:55:753 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Keine Leisten eingelegt 
13.
T : 10.06.2013 16:39:17.584  Msg.: 0003 FZ: 03:05:33:231 BZ: 05:56:02:363 SZ: 00:29:36:136 STZ:0317 STZ/h:0033.3 --> Fertigmeldung --> {;X;72;0072;307910;004;028;002;000000101977;  0.0;616;H;071305;010;616.0;002/002;;;;;24;} / GR071305.asc 
14.
F : 10.06.2013 16:39:32.606  Msg.: 1102 FZ: 03:05:33:231 BZ: 05:56:17:384 SZ: 00:29:36:136 STZ:0317 STZ/h:0033.3 --> Notaus aktiv ( Notaus entriegeln + <I-Taster> ) 
15.
F : 10.06.2013 16:39:39.816  Msg.: 1301 FZ: 03:05:33:231 BZ: 05:56:17:384 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Bitte Ablauf starten ( <NC-Start> ) 
16.
F : 10.06.2013 16:39:44.022  Msg.: 1203 FZ: 03:05:33:231 BZ: 05:56:21:590 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Keine Leisten eingelegt 
17.
F : 10.06.2013 16:39:45.224  Msg.: 1305 FZ: 03:05:33:231 BZ: 05:56:22:791 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Leisten einlegen !!! 
18.
F : 10.06.2013 16:39:47.627  Msg.: 1304 FZ: 03:05:33:231 BZ: 05:56:25:195 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Leiste einlegen und starten ( <NC-Start> ) 
19.
F : 10.06.2013 16:39:57.842  Msg.: 1100 FZ: 03:05:33:231 BZ: 05:56:35:410 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> OK


Batch
01.
@echo off & setlocal 
02.
set "battemp=Bootctrl.__2" 
03.
set "Sammel=.\export\export.csv" 
04.
set "abgearb=.\abgearbeitet" 
05.
 
06.
for /f "usebackq tokens=1* delims=:" %%A in ("%battemp%") do ( 
07.
    for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23*" %%C in ("%%B") do ( 
08.
         
09.
REM DIESE FOR SCHLEIFE SOLL MIR DAS LOGFILE ERZEUGEN, UND BEI BESTEHENDER LOG DAS SCHREIBEN IN DIE DATEI EXPORT.CSV VERHINDERN: 
10.
               for /f "usebackq tokens=1,2,3* delims=:" %%j in ('%%D') do ( 
11.
			REM HIER SCHREIBT ER DAS LOG: 
12.
			echo|set /p =".">>"%%C_%%j%%k%%l" 
13.
14.
		echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
15.
		for /f "usebackq tokens=1* delims=:" %%V in ('%%M') do ( 
16.
			echo|set /p ="%%V~">>"%sammel%" 
17.
			echo|set /p ="%%W~">>"%sammel%" 
18.
19.
		for /f "usebackq tokens=1* delims=:" %%X in ('%%N') do ( 
20.
			echo|set /p ="%%X~">>"%sammel%" 
21.
			echo|set /p ="%%Y~">>"%sammel%" 
22.
23.
		echo %%O~%%P %%Q %%R %%S %%T %%U >>"%sammel%"		 
24.
		 
25.
26.
 
27.
28.
 
--- 24.06.2013 hinzugefügt ---
Hier das geschriebene Ergebnis, das dann bei erfolgreichem Export in die Datenbank gelöscht wird:
01.
Rotox_ZEA3976001~10.06.2013~16:34:01.530~Msg.:~1100~FZ:~03:04:20:537~BZ:~05:52:10:419~SZ:~00:29:24:719~STZ~0314~STZ/h~0033.3~-->~OK
--- Ende hinzugefügt ---

Danke schon mal für die Hilfe! Selbst man mir auf die Sprünge hilft, bin ich für jeden Vorschlag dankbar.
Vielleicht macht auch das Nahende Wochenende mein Kopf wuschig ;)

Vorab vieleicht noch:

Quelldatei lässt sich nicht anpassen, und VB kann ich nur bedingt nutzen.

Danke!

Viele Grüß
Lyk
Mitglied: Endoro
21.06.2013 um 19:13 Uhr
Hallo Lyk,

du könntest die Struktur (den "Header") von export.csv mal aufschreiben und ein Beispiel posten.


lg
Bitte warten ..
Mitglied: bastla
21.06.2013, aktualisiert um 21:52 Uhr
Hallo Lyriker!

Prüfen, ob es die Zeile schon gibt, würde ich schematisch etwa so:
findstr /c:"10.06.2013 16:34:01.530" "%Sammel%">nul || echo gibt es noch nicht, daher schreiben
oder
findstr /c:"10.06.2013 16:34:01.530" "%Sammel%">nul && echo gibt es schon, daher überspringen
wobei Datum und Uhrzeit als Suchbegriff natürlich in (einer) Variablen enthalten sein müssten.

Wichtig: Damit das funktionieren kann, muss "%Sammel%" bereits vorweg existieren, was sich zB per
type nul>"%Sammel%"
realisieren ließe ...

Grüße
bastla
Bitte warten ..
Mitglied: Lyriker
24.06.2013, aktualisiert um 09:34 Uhr
Hallo und schönen Montag!

in 5 Tagen ist wieder Wochenende! ;)


@Endoro:
--- 24.06.2013 hinzugefügt ---
Hier das geschriebene Ergebnis, das dann bei erfolgreichem Export in die Datenbank gelöscht wird:
01.
Rotox_ZEA3976001~10.06.2013~16:34:01.530~Msg.:~1100~FZ:~03:04:20:537~BZ:~05:52:10:419~SZ:~00:29:24:719~STZ~0314~STZ/h~0033.3~-->~OK
--- Ende hinzugefügt ---

Habe ich auch in den Anfang übernommen

@bastla:

Leider kann man das nicht über die Exportdatei realisieren, weil diese nach erfolgreichem Export in die Datenbank gelöscht werden soll. Aber anstatt für jede Zeile könnte ich natürlich die Export Datei als Log weg schreiben, danke, damit werde ich mal experimentieren!

Aber sehr performant wird das auch nicht sein oder? ;)

Das Script ist schon so ewig langsam... ;) Überlege grad über eine bessere Lösung nach, was schwierig ist, weil ja bestimmte Teile der Token nach bearbeitet werden müssen.

Ich hatte eine Vorablösung schon realisiert (eine Sprungmarke per GOTO aus einer FOR Schleife) nur hat dann das Script nach dem zweiten Durchlauf einfach abgebrochen.

Danke vielmals!

NACHTRAG: gerade festgestellt das die Maschine immer wieder wechselnd über zwei verschiedene Logs schriebt, sobald 10000 Datensätze abgearbeitet sind.

Datei 1 ist Bootctrl.__1
Datei 2 ist Bootctrl.__2

Nur das es dann nicht verwirrend ist, wenn ich diese über einen Call dann aufrufe in das Script.

NACHTRAG ende
Bitte warten ..
Mitglied: Lyriker
24.06.2013 um 10:00 Uhr
Ok nochmals getestet, folgendes Script probiert:

~~snipp~~
01.
 
02.
		findstr /c:"%%C %%D" "D:/Rotox/ZEA3976001/Log/abgearbeitet/export.csv">nul || goto :endeeins 
03.
		echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
04.
		for /f "usebackq tokens=1* delims=:" %%V in ('%%M') do ( 
05.
			echo|set /p ="%%V~">>"%sammel%" 
06.
			echo|set /p ="%%W~">>"%sammel%" 
07.
08.
		for /f "usebackq tokens=1* delims=:" %%X in ('%%N') do ( 
09.
			echo|set /p ="%%X~">>"%sammel%" 
10.
			echo|set /p ="%%Y~">>"%sammel%" 
11.
12.
		echo %%O~%%P %%Q %%R %%S %%T %%U >>"%sammel%" 
13.
		goto :ende 
14.
		:endeeins 
15.
		echo uebersprungen! 
16.
		pause 
17.
		:ende 
18.
		echo normales Ende! 
19.
		rem pause 
20.
		)
~~snipp~~


Leider bricht es dann den kompletten Batch ab... obwohl neue Datensätze in der Vorlage dazu gekommen sind!

*Pistole an den PC hebt*

Ok jetzt geht es mir besser.

Wäre über Ideen dankbar!
Bitte warten ..
Mitglied: bastla
24.06.2013 um 14:41 Uhr
Hallo Lyriker!

Deine Zeile 2 besagt (wegen "||"): Wenn es den Timestamp "%%C %%D" nicht in der csv-Datei gibt, überspringe das Schreiben - ist das so gewollt?

Falls nicht, könntest Du ja einmal
01.
		findstr /c:"%%C %%D" "D:/Rotox/ZEA3976001/Log/abgearbeitet/export.csv">nul && ( 
02.
			echo uebersprungen! 
03.
			pause 
04.
		) || ( 
05.
			echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
06.
			for /f "usebackq tokens=1* delims=:" %%V in ('%%M') do ( 
07.
				echo|set /p ="%%V~">>"%sammel%" 
08.
				echo|set /p ="%%W~">>"%sammel%" 
09.
10.
			for /f "usebackq tokens=1* delims=:" %%X in ('%%N') do ( 
11.
				echo|set /p ="%%X~">>"%sammel%" 
12.
				echo|set /p ="%%Y~">>"%sammel%" 
13.
14.
			echo %%O~%%P %%Q %%R %%S %%T %%U >>"%sammel%" 
15.
			echo normales Ende! 
16.
			rem pause 
17.
		)
versuchen ...

Grüße
bastla
Bitte warten ..
Mitglied: Lyriker
24.06.2013 um 15:08 Uhr
Hi!

das ist natürlich eine galante(re) Lösung! ;)

Nach Hin und Her probieren habe ich es so realisiert:

Ich schreibe ein Logfile in dem der Stand hinterlegt ist.

Es funktioniert wenngleich es wirklich langsam ist, aber die zeit haben wir, zumal es ja nie immer 10000 Zeilen zu importieren gibt.

Vielen Vielen Dank für die Hilfe nochmals!

01.
@echo off & setlocal enabledelayedexpansion 
02.
if exist ".\export\export.csv" ( 
03.
del ".\export\export.csv"  
04.
05.
rem set "battemp=D:\Rotox\ZEA3976001\Log\Bootctrl.__2" 
06.
set "log_temp=D:\Rotox\ZEA3976001\Log\abgearbeitet\log_temp.csv" 
07.
set "Sammel=D:\Rotox\ZEA3976001\Log\export\export.csv" 
08.
set "log=D:\Rotox\ZEA3976001\Log\abgearbeitet\log.csv" 
09.
for /f "usebackq tokens=1* delims=:" %%A in ("%battemp%") do ( 
10.
    for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23*" %%C in ("%%B") do ( 
11.
		findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
12.
		findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%log_temp%" 
13.
		for /f "usebackq tokens=1* delims=:" %%a in ('%%M') do ( 
14.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%a~">>"%sammel%" 
15.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%b~">>"%sammel%" 
16.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%a~">>"%log_temp%" 
17.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%b~">>"%log_temp%" 
18.
19.
		for /f "usebackq tokens=1* delims=:" %%c in ('%%N') do ( 
20.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%c~">>"%sammel%" 
21.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%d~">>"%sammel%" 
22.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%c~">>"%log_temp%" 
23.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%d~">>"%log_temp%" 
24.
25.
		findstr /c:"%%C~%%D" "%log%">nul || echo %%O~%%P %%Q %%R %%S %%T %%U %%V %%W %%X %%Y %%Z>>"%sammel%"	 
26.
		findstr /c:"%%C~%%D" "%log%">nul || echo %%O~%%P %%Q %%R %%S %%T %%U %%V %%W %%X %%Y %%Z>>"%log_temp%"	 
27.
		findstr /c:"%%C~%%D" "%log%">nul || type "%log_temp%">>"%log%" 
28.
		if exist "%log_temp%" ( 
29.
			del "%log_temp%"  
30.
31.
		echo %%C~%%D 
32.
33.
 
34.
)
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...