nochamlernen
Goto Top

Suche VBScript zum auslesen einer .csv datei nach dem auslesen sollen 1 monat alte einträge geslöscht werden

Hall ich suche ein VbScript das mir die arbeit erleichtert. Das script soll in einer .csv datei die das an und abmelden eines useres erfasst spricht die Uhrzeit und das datum. Jetzt zu der genauen aufgabe das script soll einträge die älter als 1 monat löschen damit die .csv datei nich zu groß wird und ewig zum öffnen brauch. Ich würde mich über einen link/fertiges script freuen da ich einfach nicht weiter komme.
Danke im Vorraus Daniel (sry für die grottige rechtschreibung :D)

Content-Key: 214959

Url: https://administrator.de/contentid/214959

Printed on: April 18, 2024 at 10:04 o'clock

Member: colinardo
colinardo Aug 22, 2013 updated at 09:52:51 (UTC)
Goto Top
Hallo Daniel,
das könntest du mit folgendem Script erreichen:
(Pfad zur CSV-Datei noch in der ersten Zeile ändern)
CSV = "F:\login.csv"  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = WScript.CreateObject("Wscript.Shell")  
USERNAME = objShell.ExpandEnvironmentStrings("%username%")  
If Not fso.FileExists(CSV) Then
	'CSV-Datei erstellen wenn sie noch nicht existiert  
	Set objNewFile = fso.CreateTextFile(CSV,False)
Else
	'Einträge älter as 30 Tage nicht übernehmen  
	strContent = Split(fso.OpenTextFile(CSV,1).ReadAll,vbNewLine)
	Set objNewFile = fso.OpenTextFile(CSV,2)
	For i = 0 To UBound(strContent)
		If strContent(i) <> "" Then  
			lineDatum = Split(strContent(i),";")(0)  
			If DateValue(lineDatum) > DateAdd("d",-30,Now()) Then  
				objNewFile.WriteLine strContent(i)
			End If
		End If
	Next
End If
'Aktuellen Login eintragen  
objNewFile.WriteLine Now() & ";" & USERNAME  
objNewFile.Close

die resultierende CSV-Datei sähe dann nach folgendem Muster aus:
22.08.2013 11:46:48;hmustermann
22.08.2013 11:46:59;gmusterfrau
Einträge älter als 30 Tage werden herausgelöscht und neue Einträge angehängt.

Grüße Uwe
Member: nochamlernen
nochamlernen Aug 22, 2013 at 09:55:00 (UTC)
Goto Top
Danke dir muss das muster meiner csv datei noch deinen angaben entsprchend gestallten :D
Member: nochamlernen
nochamlernen Aug 22, 2013 at 10:03:08 (UTC)
Goto Top
Noch mal eben eine frage würde es so auch gehen Abgemeldet: constantin 22.08.2013 01:05,1
Member: colinardo
colinardo Aug 22, 2013 updated at 10:08:46 (UTC)
Goto Top
Im Moment loggt das Script nur Anmeldungen. Passe ich dir noch an.
Meinst du das deine Struktur dann so aussieht ohne irgendein Trennzeichen wie ";" ?:
Abgemeldet: constantin 22.08.2013 01:05,1
mit der Uhrzeit könnte es Probleme geben, aber ich kann den Datumsvergleich auch nur über das Datum machen.
Member: nochamlernen
nochamlernen Aug 22, 2013 at 10:08:54 (UTC)
Goto Top
Wenn es dir hillft kann ich dir die gemeinte csv datei schicken ( wenn das hier irgend wie möglich ist )
Member: colinardo
colinardo Aug 22, 2013 at 10:10:16 (UTC)
Goto Top
poste hier einfach einen Ausschnitt, und benutze Code-Tags dafür.
Member: nochamlernen
nochamlernen Aug 22, 2013 at 10:20:05 (UTC)
Goto Top
Sry wenn das jetzt dumm kling naja ist es auch aber da steig ich nich durch ich meinte

Abgemeldet:
User: Datum: Zeit:
constantin 21.08.2013 15:31:35,23

so sah das vor deinem script aus

Abgemeldet: constantin 22.08.2013 01:05,1

jetzt so jeder wert in einer tabelen spalte und ich habe schon programme die das hoch und runter fahren so wie das an und abmelden in diese csv datei schreiben.
Member: colinardo
colinardo Aug 22, 2013 at 10:28:30 (UTC)
Goto Top
Zitat von @nochamlernen:
Sry wenn das jetzt dumm kling naja ist es auch aber da steig ich nich durch ich meinte

Abgemeldet:
User: Datum: Zeit:
constantin 21.08.2013 15:31:35,23

so sah das vor deinem script aus

Abgemeldet: constantin 22.08.2013 01:05,1

jetzt so jeder wert in einer tabelen spalte und ich habe schon programme die das hoch und runter fahren so wie das an und abmelden
in diese csv datei schreiben.
Sorry aber dein Deutsch ist zu schlecht um dich vernünftig zu verstehen.

Hier mein Vorschlag, deine CSV-Datei zu strukturieren:
Angemeldet;username;22.08.2013 18:00.00
Abgemeldet;username;22.08.2013 17:00.00
die Felder sind jeweils mit einem Semikolon voneinander getrennt, das erkennt Excel dann automatisch und ordnet den Feldern jeweils eine separate Spalte zu wenn du die CSV-Datei öffnest. Das ist ja auch der eigentlich Zweck einer CSV-Datei. Das was du machen willst ist Bullshit.
Member: colinardo
colinardo Aug 22, 2013 at 10:38:15 (UTC)
Goto Top
Zitat von @colinardo:
Hier mein Vorschlag, deine CSV-Datei zu strukturieren:
Angemeldet;username;22.08.2013 18:00.00
Abgemeldet;username;22.08.2013 17:00.00
Zu meinem Vorschlag hier das passende Script das auch Anmelden und Abmelden unterscheidet
Dazu startet man das script mit folgenden Kommandozeilen, je nach nachdem ob es ein Anmelden oder ein Abmelden-Event sein soll

back-to-topIm Anmelde-Script:
cscript.exe //NOLOGO dasscript.vbs logon

back-to-topIm Abmelde-Script
cscript.exe //NOLOGO dasscript.vbs logoff

CSV = "F:\login.csv"  
'Scriptargumente überprüfen  
Set objArgs = WScript.Arguments
If objArgs.Count = 1 Then
	Select Case objArgs(0)
		Case "logon"  
			LOGON_TYPE = "Angemeldet"  
		Case "logoff"  
			LOGON_TYPE = "Abgemeldet"  
	End Select
Else
	WScript.Quit 1
End If

Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = WScript.CreateObject("Wscript.Shell")  
USERNAME = objShell.ExpandEnvironmentStrings("%username%")  
If Not fso.FileExists(CSV) Then
	'CSV-Datei erstellen wenn sie noch nicht existiert  
	Set objNewFile = fso.CreateTextFile(CSV,False,True)
Else
	Set objCSVFile = fso.OpenTextFile(CSV,1)
	If Not objCSVFile.AtEndOfStream Then	'wenn die datei nicht leer ist   
		strContent = Split(objCSVFile.ReadAll,vbNewLine)
		objCSVFile.Close
		Set objNewFile = fso.OpenTextFile(CSV,2)
		'Einträge älter as 30 Tage nicht übernehmen  
		For i = 0 To UBound(strContent)
			If strContent(i) <> "" Then  
				lineDatum = Split(strContent(i),";")(2)  
				If DateValue(lineDatum) > DateAdd("d",-30,Now()) Then  
					objNewFile.WriteLine strContent(i)
				End If
			End If
		Next
	Else 	'wenn die Datei leer sein sollte  
		Set objNewFile = fso.OpenTextFile(CSV,2)
	End If
End If
'Aktuellen Login eintragen  
objNewFile.WriteLine LOGON_TYPE & ";" & USERNAME & ";" & Now()  
objNewFile.Close
Member: nochamlernen
nochamlernen Aug 22, 2013 at 10:39:33 (UTC)
Goto Top
Ich bin für jede art der änderung bereit und das mit dem deutsch stimmt habs grade selber noch einmal duch gelesen es tut mir sehr leid.Ich meinte damit das meine batch das so in die csv schreibt: Abgemeldet:
User: Datum: Zeit:
constantin 21.08.2013 15:31:35,23

Halt alles in einer spalte und untereinander jetzt hab ich meine batch umgeschreiben und die schreibt das jetzt so in die csv :
Abgemeldet: constantin 22.08.2013 01:05,1. Auch hier alles in einer spallte.
Ich hoffe du hast mich jetzt besser verstanden fals nich tut mir wie gesagt leid deutsch is ein fach nich so meine stärke.
Gruss
Daniel
Member: nochamlernen
nochamlernen Aug 22, 2013 at 10:45:35 (UTC)
Goto Top
Also dieses mit dem an und abmelden soll automatisch geschehen wenn der benutzer sich einloggt bei windows mit dem abschnitt bin ich ja schon fertig mir geht es eigentlich nur noch dadrum das eine datei die man startet meine csv datei list und die einträge löscht die älter als 1 monat sind damit die deitei nicht denn speicher blockiert oder ewig zum laden braucht. Es tut mir echt leid das wir uns grade so miss verstehen Ich bin einfach nur zu blöd.
Member: colinardo
colinardo Aug 22, 2013 updated at 12:38:13 (UTC)
Goto Top
Zitat von @nochamlernen:
Also dieses mit dem an und abmelden soll automatisch geschehen wenn der benutzer sich einloggt bei windows mit dem abschnitt bin
ich ja schon fertig mir geht es eigentlich nur noch dadrum das eine datei die man startet meine csv datei list und die
einträge löscht die älter als 1 monat sind damit die deitei nicht denn speicher blockiert oder ewig zum laden
braucht. Es tut mir echt leid das wir uns grade so miss verstehen Ich bin einfach nur zu blöd.

aber lesen kannst du hoffentlich, ich hatte oben geschrieben das das Script das Löschen der älteren Einträge bereits beinhaltet. Im Code steht dies ebenfalls. Da du diesen anscheinend nicht ließt sondern einfach nur Copy n' Paste betreibst, klinke ich mich abschließend mit folgendem Script gepflegt aus.

für deine gewünschte Ausgabe
Abgemeldet: constantin 22.08.2013 01:05:00
geht dieses Script. Alles weitere dazu steht weiter oben.
CSV = "F:\login.csv"  
'Scriptargumente überprüfen  
Set objArgs = WScript.Arguments
If objArgs.Count = 1 Then
	Select Case objArgs(0)
		Case "logon"  
			LOGON_TYPE = "Angemeldet:"  
		Case "logoff"  
			LOGON_TYPE = "Abgemeldet:"  
	End Select
Else
	WScript.Quit 1
End If

Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = WScript.CreateObject("Wscript.Shell")  
USERNAME = objShell.ExpandEnvironmentStrings("%username%")  
If Not fso.FileExists(CSV) Then
	'CSV-Datei erstellen wenn sie noch nicht existiert  
	Set objNewFile = fso.CreateTextFile(CSV,False,True)
Else
	Set objCSVFile = fso.OpenTextFile(CSV,1)
	If Not objCSVFile.AtEndOfStream Then	'wenn die datei nicht leer ist   
		strContent = Split(objCSVFile.ReadAll,vbNewLine)
		objCSVFile.Close
		Set objNewFile = fso.OpenTextFile(CSV,2)
		'Einträge älter als 30 Tage nicht übernehmen  
		For i = 0 To UBound(strContent)
			If strContent(i) <> "" Then  
				lineDatum = Split(strContent(i)," ")(2)  
				If DateValue(lineDatum) > DateAdd("d",-30,Now()) Then  
					objNewFile.WriteLine strContent(i)
				End If
			End If
		Next
	Else 	'wenn die Datei leer sein sollte  
		Set objNewFile = fso.OpenTextFile(CSV,2)
	End If
End If
'Aktuellen Login eintragen  
objNewFile.WriteLine LOGON_TYPE & " " & USERNAME & " " & Now()  
objNewFile.Close

Viel Erfolg
Grüße Uwe
Member: nochamlernen
nochamlernen Aug 22, 2013 at 13:07:31 (UTC)
Goto Top
sry habe deine scripst schon gelesen aber wenn man sie nicht komplet versteht was soll man machen ich bedanke mich ganz herlich bei dir
Gruss
Daniel