Mit VBScript Zeilen mit bestimmten Werten aus TXT-Datei auslesen und in neuer TXT-Datei speichern
Hallo,
Folgendes Thema würde ich gerne mittels VB Script - nicht mit Batch erledigen
Aus einer TXT.Datei möchte ich Zeilen mit bestimmten Werten, so etwas wie mit find, auslesen und diese dann in einer neuen TXT.Datei abspeichern.
Die übrigen Zeilen, die diesen o.g. Wert nicht enthalten lese ich mit dem Befehl /v ,denk ich mal, ebenfalls aus und will das in einer
zweiten TXT.Datei abspeichern.
Da die beiden TXT.Dateien nicht überschrieben werden sollen, müsste beim Speichern an dem Namen der TXT.Datei das Datum und die Uhrzeit (Std/Min) mit angehängt werden.
Die Ursprungs-TXT.Dateien hat eine erste Zeile (Statuszeile) die bei den beiden neuen TXT.Dateien ebenfalls als erste Zeile enthalten sein soll.
Vielleicht kann man am Anfag des VBScripts eine Abfrage einbauen um die gewünschte TXT.Datei im Explorer auswählen zu können. Ich bedanke mich mal im Voraus für die Hilfe. Evtl. Erklärungen zu den einzelnen Befehlen/Funktionen wären für mich als Einsteiger sehr hilfreich.
ndb-str
Folgendes Thema würde ich gerne mittels VB Script - nicht mit Batch erledigen
Aus einer TXT.Datei möchte ich Zeilen mit bestimmten Werten, so etwas wie mit find, auslesen und diese dann in einer neuen TXT.Datei abspeichern.
Die übrigen Zeilen, die diesen o.g. Wert nicht enthalten lese ich mit dem Befehl /v ,denk ich mal, ebenfalls aus und will das in einer
zweiten TXT.Datei abspeichern.
Da die beiden TXT.Dateien nicht überschrieben werden sollen, müsste beim Speichern an dem Namen der TXT.Datei das Datum und die Uhrzeit (Std/Min) mit angehängt werden.
Die Ursprungs-TXT.Dateien hat eine erste Zeile (Statuszeile) die bei den beiden neuen TXT.Dateien ebenfalls als erste Zeile enthalten sein soll.
Vielleicht kann man am Anfag des VBScripts eine Abfrage einbauen um die gewünschte TXT.Datei im Explorer auswählen zu können. Ich bedanke mich mal im Voraus für die Hilfe. Evtl. Erklärungen zu den einzelnen Befehlen/Funktionen wären für mich als Einsteiger sehr hilfreich.
ndb-str
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108968
Url: https://administrator.de/contentid/108968
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo ndb-str!
Etwas zum Testen:
Noch zwei Anmerkungen:
Es können mehrere Suchbegriffe verwendet werden (siehe Zeile 1), wobei auf das Vorhandensein (ohne Berücksichtigung von Groß-/Kleinschreibung, was allerdings aufgrund Deines Beispieles nicht relevant ist) des jeweiligen Suchbegriffes irgendwo innerhalb einer Zeile geprüft wird (daher mein Vorschlag mit Einbeziehung des Trennzeiches).
Der Dateiauswahldialog (wird angeboten, wenn beim Aufruf des Scripts keine Datei - auch nicht per Drag & Drop - übergeben wurde) funktioniert nur mit XP - Alternativen in diesem Thread: VBS - Datei auswählen ...
[Edit]
Bei Ersatz der Zeilen 6 bis 9 durch
sollte auch unter W2003 (aber nicht unter Vista) eine Dateiauswahl möglich sein.
[/Edit]
Grüße
bastla
Etwas zum Testen:
Suchbegriffe = Array(";0004", "; 0004") 'Alle Zeilen, welche zumindest einen dieser Begriffe enthalten, werden in die "Gefunden"-Datei geschrieben
If WScript.Arguments.Count > 0 Then 'Falls ein Dateipfad beim Aufruf übergeben wurde, ...
Ein = WScript.Arguments(0) '... diesen in der Variablen "Ein" speichern.
Else 'Wurde kein Pfad übergeben, eine Dateiauswahl anbieten (nur für XP)
Set Dialog = CreateObject("UserAccounts.CommonDialog")
Dialog.Filter = "Textdateien|*.txt|Alle Dateien|*.*"
Dialog.ShowOpen
Ein = Dialog.FileName
End If
Set fso = CreateObject("Scripting.FileSystemObject") 'Dateisystemobjekt (für das Arbeiten mit Dateien) erzeugen
If Not fso.FileExists(Ein) Then 'Pfad überprüfen und ...
MsgBox "Keine gültige Datei gewählt!", vbCritical, "Dateifehler!" '... bei ungültigem Pfad Meldung ausgeben sowie ...
WScript.Quit '... Script beenden.
End If
'Pfad der Originaldatei zerlegen
Dateipfad = fso.GetParentFolderName(Ein)
If Right(Dateipfad, 1) <> "\" Then Dateipfad = Dateipfad & "\" 'sicher stellen, dass Pfad mit "\" endet
Dateiname = fso.GetBaseName(Ein)
Dateityp = fso.GetExtensionName(Ein)
Zeit = Now 'Zeitpunkt festhalten
ZeitFormatiert = _
Year(Zeit) & _
Right("0" & Month(Zeit), 2) & _
Right("0" & Day(Zeit), 2) & _
"-" & _
Right("0" & Hour(Zeit), 2) & _
Right("0" & Minute(Zeit), 2)
Gefunden = Dateipfad & Dateiname & "_G_" & ZeitFormatiert & "." & DateiTyp 'Dateiname der "Gefunden"-Datei
NichtGefunden = Dateipfad & Dateiname & "_N_" & ZeitFormatiert & "." & DateiTyp 'Dateiname der "Nicht gefunden"-Datei
Set G = fso.CreateTextFile(Gefunden, True) '"Gefunden"-Datei erzeugen
Set N = fso.CreateTextFile(NichtGefunden, True) '"Nicht gefunden"-Datei erzeugen
T = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLF) 'gesamten Inhalt der Originaldatei zeilenweise in ein Array einlesen
U = Ubound(T) 'höchsten Index des Arrays ermitteln
G.WriteLine T(0) 'erste Zeile in "Gefunden"-Datei schreiben
N.WriteLine T(0) 'erste Zeile in "Nicht gefunden"-Datei schreiben
For i = 1 To U 'ab Zeile 2 (= Index 1) alle Zeilen der Originaldatei durchgehen
Geschrieben = False 'Schalter, um festzuhalten, ob die Zeile bereits geschrieben wurde
For Each Begriff In Suchbegriffe 'alle angegebenen Suchbegriffe durchgehen
If InStr(1, T(i), Begriff, vbTextCompare) > 0 Then 'Wenn ein Suchbegriff in der Zeile gefunden wurde, ...
G.WriteLine T(i) '... diese in die "Gefunden"-Datei schreiben und ...
Geschrieben = True '... die Tatsache, dass die Zeile geschrieben wurde, festhalten sowie ...
Exit For '... die Überprüfung auf weitere Suchbegriffe unter- und dazu die Schleife verlassen.
End If
Next
If Not Geschrieben Then N.WriteLine T(i) ' Falls die Zeile noch nicht geschrieben wurde, dann in "Nicht gefunden"-Datei schreiben
Next
G.Close '"Gefunden"-Datei schließen
N.Close '"Nicht gefunden"-Datei schließen
MsgBox "Fertig."
Es können mehrere Suchbegriffe verwendet werden (siehe Zeile 1), wobei auf das Vorhandensein (ohne Berücksichtigung von Groß-/Kleinschreibung, was allerdings aufgrund Deines Beispieles nicht relevant ist) des jeweiligen Suchbegriffes irgendwo innerhalb einer Zeile geprüft wird (daher mein Vorschlag mit Einbeziehung des Trennzeiches).
Der Dateiauswahldialog (wird angeboten, wenn beim Aufruf des Scripts keine Datei - auch nicht per Drag & Drop - übergeben wurde) funktioniert nur mit XP - Alternativen in diesem Thread: VBS - Datei auswählen ...
[Edit]
Bei Ersatz der Zeilen 6 bis 9 durch
Set Dialog = CreateObject("SAFRCFileDlg.FileOpen")
If Dialog.OpenFileOpenDlg Then Ein = Dialog.FileName
[/Edit]
Grüße
bastla