ndb-str
Goto Top

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

Content-ID: 108968

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

bastla
bastla 13.02.2009 um 19:41:07 Uhr
Goto Top
Hallo ndb-str und willkommen im Forum!

Zeilen mit bestimmten Werten
Ist die Mehrzahl bei "Werten" Absicht? Wie sollen diese "Werte" festgelegt werden?

Die übrigen Zeilen
... wären also auch Leerzeilen?

Grüße
bastla
ndb-str
ndb-str 13.02.2009 um 19:53:31 Uhr
Goto Top
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
bastla
bastla 13.02.2009, aktualisiert am 18.10.2012 um 18:37:45 Uhr
Goto Top
Hallo ndb-str!

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."  
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
    Set Dialog = CreateObject("SAFRCFileDlg.FileOpen")
    If Dialog.OpenFileOpenDlg Then Ein = Dialog.FileName
sollte auch unter W2003 (aber nicht unter Vista) eine Dateiauswahl möglich sein.
[/Edit]

Grüße
bastla
ndb-str
ndb-str 14.02.2009 um 16:36:07 Uhr
Goto Top
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