Frage ist gelöstMit VBScript Zeilen mit bestimmten Werten aus TXT-Datei auslesen und in neuer TXT-Datei speichern
13.02.2009
18:35:48 Uhr6348 Aufrufe
4 Antworten
18:35:48 Uhr
4 Antworten
Noch nicht bewertet
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
ndb-str schreibt am 13.02.2009 um 19:53:31 Uhr
Hallo bastla,
bei den Zeilen handelt es sich mit Semikolon getrennte Werte die später im AD verarbeitet werden. Bestimmte Zeilen mit gleichen Werten sollen ausgelesen werden.
z.B. der Wert 000456789, der Wert 000567890 und der Wert 000654321 kommen jeweils in verschiedenen Zeilen vor. Es sollen nun alle Zeilen, bei den ein Wert, welcher mit 0004 beginnt ausgelesen werden und alle Zeilen die diesen Wert nicht enthalten.
Gruß
ndb-str
bei den Zeilen handelt es sich mit Semikolon getrennte Werte die später im AD verarbeitet werden. Bestimmte Zeilen mit gleichen Werten sollen ausgelesen werden.
z.B. der Wert 000456789, der Wert 000567890 und der Wert 000654321 kommen jeweils in verschiedenen Zeilen vor. Es sollen nun alle Zeilen, bei den ein Wert, welcher mit 0004 beginnt ausgelesen werden und alle Zeilen die diesen Wert nicht enthalten.
Gruß
ndb-str
bastla schreibt am 13.02.2009 um 21:28:33 Uhr
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:
01.
Suchbegriffe = Array(";0004", "; 0004") 'Alle Zeilen, welche zumindest einen dieser Begriffe enthalten, werden in die "Gefunden"-Datei geschrieben 02.
03.
If WScript.Arguments.Count > 0 Then 'Falls ein Dateipfad beim Aufruf übergeben wurde, ... 04.
Ein = WScript.Arguments(0) '... diesen in der Variablen "Ein" speichern. 05.
Else 'Wurde kein Pfad übergeben, eine Dateiauswahl anbieten (nur für XP) 06.
Set Dialog = CreateObject("UserAccounts.CommonDialog") 07.
Dialog.Filter = "Textdateien|*.txt|Alle Dateien|*.*" 08.
Dialog.ShowOpen 09.
Ein = Dialog.FileName 10.
End If 11.
12.
Set fso = CreateObject("Scripting.FileSystemObject") 'Dateisystemobjekt (für das Arbeiten mit Dateien) erzeugen 13.
If Not fso.FileExists(Ein) Then 'Pfad überprüfen und ... 14.
MsgBox "Keine gültige Datei gewählt!", vbCritical, "Dateifehler!" '... bei ungültigem Pfad Meldung ausgeben sowie ... 15.
WScript.Quit '... Script beenden. 16.
End If 17.
18.
'Pfad der Originaldatei zerlegen 19.
Dateipfad = fso.GetParentFolderName(Ein) 20.
If Right(Dateipfad, 1) <> "\" Then Dateipfad = Dateipfad & "\" 'sicher stellen, dass Pfad mit "\" endet 21.
Dateiname = fso.GetBaseName(Ein) 22.
Dateityp = fso.GetExtensionName(Ein) 23.
24.
Zeit = Now 'Zeitpunkt festhalten 25.
ZeitFormatiert = _ 26.
Year(Zeit) & _ 27.
Right("0" & Month(Zeit), 2) & _ 28.
Right("0" & Day(Zeit), 2) & _ 29.
"-" & _ 30.
Right("0" & Hour(Zeit), 2) & _ 31.
Right("0" & Minute(Zeit), 2) 32.
33.
Gefunden = Dateipfad & Dateiname & "_G_" & ZeitFormatiert & "." & DateiTyp 'Dateiname der "Gefunden"-Datei 34.
NichtGefunden = Dateipfad & Dateiname & "_N_" & ZeitFormatiert & "." & DateiTyp 'Dateiname der "Nicht gefunden"-Datei 35.
36.
Set G = fso.CreateTextFile(Gefunden, True) '"Gefunden"-Datei erzeugen 37.
Set N = fso.CreateTextFile(NichtGefunden, True) '"Nicht gefunden"-Datei erzeugen 38.
39.
T = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLF) 'gesamten Inhalt der Originaldatei zeilenweise in ein Array einlesen 40.
U = Ubound(T) 'höchsten Index des Arrays ermitteln 41.
42.
G.WriteLine T(0) 'erste Zeile in "Gefunden"-Datei schreiben 43.
N.WriteLine T(0) 'erste Zeile in "Nicht gefunden"-Datei schreiben 44.
45.
For i = 1 To U 'ab Zeile 2 (= Index 1) alle Zeilen der Originaldatei durchgehen 46.
Geschrieben = False 'Schalter, um festzuhalten, ob die Zeile bereits geschrieben wurde 47.
For Each Begriff In Suchbegriffe 'alle angegebenen Suchbegriffe durchgehen 48.
If InStr(1, T(i), Begriff, vbTextCompare) > 0 Then 'Wenn ein Suchbegriff in der Zeile gefunden wurde, ... 49.
G.WriteLine T(i) '... diese in die "Gefunden"-Datei schreiben und ... 50.
Geschrieben = True '... die Tatsache, dass die Zeile geschrieben wurde, festhalten sowie ... 51.
Exit For '... die Überprüfung auf weitere Suchbegriffe unter- und dazu die Schleife verlassen. 52.
End If 53.
Next 54.
If Not Geschrieben Then N.WriteLine T(i) ' Falls die Zeile noch nicht geschrieben wurde, dann in "Nicht gefunden"-Datei schreiben 55.
Next 56.
57.
G.Close '"Gefunden"-Datei schließen 58.
N.Close '"Nicht gefunden"-Datei schließen 59.
60.
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
ndb-str schreibt am 14.02.2009 um 16:36:07 Uhr
Hallo bastla,
das ist ein genau das was ich mir vorstelle. Herzlichen Dank dafür.
Werde nun versuchen noch ein paar Kleinigkeiten dazuzubasteln wenn es mir gelingt.
Eventuell werde ich dich dann nochmal um Rat bitten wenn ich irgendwo hängenbleibe.
Nochmal vielen Dank
ndb-str
das ist ein genau das was ich mir vorstelle. Herzlichen Dank dafür.
Werde nun versuchen noch ein paar Kleinigkeiten dazuzubasteln wenn es mir gelingt.
Eventuell werde ich dich dann nochmal um Rat bitten wenn ich irgendwo hängenbleibe.
Nochmal vielen Dank
ndb-str





