VBS - bestimmte Zeilen löschen
aus einer Text Datei bestimmte Zeilen löschen
Ich möchte gerne aus einer Text Datei bestimmte Zeilen löschen.
AUs der Text Datei möchte ich alle Zeilen löschen die am Anfang |S| stehen haben.
Ich möchte gerne aus einer Text Datei bestimmte Zeilen löschen.
AUs der Text Datei möchte ich alle Zeilen löschen die am Anfang |S| stehen haben.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 106153
Url: https://administrator.de/forum/vbs-bestimmte-zeilen-loeschen-106153.html
Ausgedruckt am: 23.12.2024 um 06:12 Uhr
12 Kommentare
Neuester Kommentar
@Turrex0100
Das zweite "Nein" nicht nur, weil VBS gefragt war, sondern auch in Batch "|", wenn zwischen Anführungszeichen verwendet, als gewöhnliches Zeichen behandelt werden kann (und anderenfalls durch ein vorangestelltes "^" maskiert werden könnte) - Beispiel:
In VBS etwa so:
Grüße
bastla
ich könnte mir denken das es schwierig wird weil der | auch ein befehlszeichen ist oder?
Nein und nein. Das zweite "Nein" nicht nur, weil VBS gefragt war, sondern auch in Batch "|", wenn zwischen Anführungszeichen verwendet, als gewöhnliches Zeichen behandelt werden kann (und anderenfalls durch ein vorangestelltes "^" maskiert werden könnte) - Beispiel:
findstr /b /v "|S|" D:\Datei.txt>D:\Datei_neu.txt
Set fso = CreateObject("Scripting.FileSystemObject")
DateiEin = "D:\Datei.txt"
DateiAus = "D:\Datei_neu.txt"
T = Split(fso.OpenTextFile(DateiEin).ReadAll, vbCrLF)
Set Ausgabe = fso.CreateTextFile(DateiAus, True)
For Each Z In T
If Left(Z, 3) <> "|S|" Then Ausgabe.WriteLine Z
Next
Ausgabe.Close
bastla
Hallo mctini!
Kurz der gewünschte Kommentar:
Zeile 4: Lese den gesamten Inhalt der Textdatei ein und teile ihn in Zeilen auf (Trennzeichen ist "vbCrLF", also die "Windows-Zeilenschaltung") - Ergebnis: Nach dieser Zeile enthät das Array T(0) bis T(Zeilenanzahl - 1) die einzelnen Zeilen der Textdatei.
Zeile 5: Erzeuge eine neue Textdatei als Objekt (damit in Zeile 7 bei Bedarf in diese Datei geschrieben werden kann).
Zeile 6: Eine Schleife über alle Elemente des Arrays T (= über alle Zeilen), wobei die jeweils aktuelle Zeile in die Variable Z gestellt wird.
Zeile 7: Wenn die ersten 3 Zeichen der Zeile nicht dem Suchstring (hier gleich als Konstante "|S|" eingetragen) entsprechen, schreibe diese Zeile in die Ergebnisdatei - damit werden alle Zeilen, die mit dem Suchstring beginnen weg gelassen ...
Wenn Du nur die ersten 32 Zeilen benötigst, muss die Schleife ein wenig anders aussehen:
Grüße
bastla
Kurz der gewünschte Kommentar:
Zeile 4: Lese den gesamten Inhalt der Textdatei ein und teile ihn in Zeilen auf (Trennzeichen ist "vbCrLF", also die "Windows-Zeilenschaltung") - Ergebnis: Nach dieser Zeile enthät das Array T(0) bis T(Zeilenanzahl - 1) die einzelnen Zeilen der Textdatei.
Zeile 5: Erzeuge eine neue Textdatei als Objekt (damit in Zeile 7 bei Bedarf in diese Datei geschrieben werden kann).
Zeile 6: Eine Schleife über alle Elemente des Arrays T (= über alle Zeilen), wobei die jeweils aktuelle Zeile in die Variable Z gestellt wird.
Zeile 7: Wenn die ersten 3 Zeichen der Zeile nicht dem Suchstring (hier gleich als Konstante "|S|" eingetragen) entsprechen, schreibe diese Zeile in die Ergebnisdatei - damit werden alle Zeilen, die mit dem Suchstring beginnen weg gelassen ...
Wenn Du nur die ersten 32 Zeilen benötigst, muss die Schleife ein wenig anders aussehen:
Anzahl = 31 'Zählung beginnt bei 0
If UBound(T) < Anzahl Then Anzahl = UBound(T) 'falls es weniger als 32 Zeilen gibt, nimm eben alle
For i = 0 To Anzahl
If Left(T(i), 3) <> "|S|" Then Ausgabe.WriteLine T(i) 'per Index i direkter Zugriff auf die Arrayelemente von T
Next
bastla
Hallo mctini!
Hatte ich leider anders interpretiert: "Nur die erten 32 Zeilen der Datei sollen untersucht werden".
Um 32 Zeilen ohne "|S|" zu behalten sähe die Schleife etwa so aus:
Die auskommentierte Zeile 8 könnte zur Performance-Verbesserung verwendet werden: Nach dem Erreichen der Gesamtanzahl kann die Schleife verlassen werden. Falls dies gewünscht ist, einfach den Apostroph entfernen ...
Grüße
bastla
Hatte ich leider anders interpretiert: "Nur die erten 32 Zeilen der Datei sollen untersucht werden".
Um 32 Zeilen ohne "|S|" zu behalten sähe die Schleife etwa so aus:
Anzahl = 32
Geschrieben = 0
For Each Z In T
If Left(Z, 3) <> "|S|" Then
If Geschrieben < Anzahl Then
Ausgabe.WriteLine Z
Geschrieben = Geschrieben + 1
'If Geschrieben >= Anzahl Then Exit For
End If
End If
Next
Grüße
bastla
@bastla
gut gut...
bin mit batch etwas mehr vertraut und kenn es da nur als befehlszeichen.....
war auch nur ne idee.
bin um alles was ich lerne dankbar
lg Turrex
gut gut...
bin mit batch etwas mehr vertraut und kenn es da nur als befehlszeichen.....
war auch nur ne idee.
bin um alles was ich lerne dankbar
lg Turrex
C:\>grep -v "^|S|" csvtest.txt
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
XWXX|G|BA 963|Rechner|2009-01-15|07:15||||
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
|XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
und danach natürlich noch in die gewünschte Datei > pipen.
grep für Windows gibt es unter
http://unxutils.sourceforge.net/
@suse-5-0
In diesem Fall genügte (wäre nicht VBS gefragt gewesen) auch die CMD-Shell:
Grüße
bastla
In diesem Fall genügte (wäre nicht VBS gefragt gewesen) auch die CMD-Shell:
findstr /v "^|S|" csvtest.txt
bastla