Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS - bestimmte Zeilen löschen

Frage Entwicklung VB for Applications

Mitglied: mctini

mctini (Level 1) - Jetzt verbinden

15.01.2009, aktualisiert 18.10.2012, 14722 Aufrufe, 12 Kommentare

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.


|S|AA 3918|Host01|2009-01-15|07:10|||A35|7|
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
|S|AA 3918|Host01|2009-01-15|07:10|||A35|7|
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|||||
|S|AA 3918|Host01|2009-01-15|07:10|||A35|7|
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
|S|AA 3918|Host01|2009-01-15|07:10|||A35|7|
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||||
Mitglied: Turrex0100
15.01.2009 um 15:50 Uhr
kenne mich zwar kaum aus, aber ich könnte mir denken das es schwierig wird weil der | auch ein befehlszeichen ist oder?
Bitte warten ..
Mitglied: bastla
15.01.2009 um 16:12 Uhr
@Turrex0100
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
In VBS etwa so:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
DateiEin = "D:\Datei.txt" 
03.
DateiAus = "D:\Datei_neu.txt" 
04.
T = Split(fso.OpenTextFile(DateiEin).ReadAll, vbCrLF) 
05.
Set Ausgabe = fso.CreateTextFile(DateiAus, True) 
06.
For Each Z In T 
07.
   If Left(Z, 3) <> "|S|" Then Ausgabe.WriteLine Z 
08.
Next 
09.
Ausgabe.Close
Grüße
bastla
Bitte warten ..
Mitglied: mctini
15.01.2009 um 16:36 Uhr
Gerne probiere ich auch Dein Script. Auf jeden Fall sieht es wesentlich konfortabler aus.

Hier meins
'InsertText.vbs 02.
SourceFile = "c:\dep.txt"
Pos = 1
InsertText = ""

MStart = "|S|"
MEnd = "*END*"
BakExt = ".bak"

If WScript.Arguments.Count > 0 Then SourceFile = WScript.Arguments(0)
BakFile = SourceFile & BakExt
TargetFile = SourceFile

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(TargetFile) Then
WScript.Echo TargetFile & " konnte nicht gefunden werden!"
WScript.Quit(1)
End If
If fso.FileExists(BakFile) Then fso.DeleteFile(BakFile)
fso.MoveFile TargetFile, BakFile
Lines = Split(fso.OpenTextFile(BakFile, 1, False).ReadAll, vbCrLF)

Set Target = fso.OpenTextFile(TargetFile, 2, True)

Ins = False
For Each Line In Lines
If InStr(Line, MStart) Then
Ins = True
ElseIf InStr(Line, MEnd) Then
Ins = False
Else
LineNew = Line
If Ins Then If Len(Line) >= (Pos - 1) Then LineNew = Left(Line, Pos - 1) & InsertText & Mid(Line, Pos)
Target.WriteLine LineNew
End If
Next

Target.Close
Bitte warten ..
Mitglied: bastla
15.01.2009, aktualisiert 18.10.2012
Hallo mctini!

Deines war damals für einen etwas anderen Zweck gedacht ...

Grüße
bastla
Bitte warten ..
Mitglied: mctini
15.01.2009 um 16:43 Uhr
Hi bastla

genial bist du und sei dank geht prima

würde es dir etwas aus machen noch ein kommentar zu zeile 4 -7 zu schreiben
Bitte warten ..
Mitglied: mctini
15.01.2009 um 17:01 Uhr
Vielleicht kannst du mir ja noch sagen wie dann nur die ersten 32 Zeile darstelle. Alles was dannach kommt ist uninteressant.
Bitte warten ..
Mitglied: bastla
15.01.2009 um 18:08 Uhr
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:
01.
Anzahl = 31 'Zählung beginnt bei 0 
02.
If UBound(T) < Anzahl Then Anzahl = UBound(T) 'falls es weniger als 32 Zeilen gibt, nimm eben alle 
03.
For i = 0 To Anzahl 
04.
    If Left(T(i), 3) <> "|S|" Then Ausgabe.WriteLine T(i) 'per Index i direkter Zugriff auf die Arrayelemente von T 
05.
Next
Grüße
bastla
Bitte warten ..
Mitglied: mctini
16.01.2009 um 09:04 Uhr
Super, vielen Dank

Leider geht das noch nicht richtig. Es werden nun alle Zeilen weggelöscht

Alle mit |S| sollen weg und der Rest sind z.B. 100 Zeilen davon soll er Anzahl behalten
Bitte warten ..
Mitglied: bastla
16.01.2009, aktualisiert 14.11.2012
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:
01.
Anzahl = 32 
02.
Geschrieben = 0 
03.
For Each Z In T  
04.
    If Left(Z, 3) <> "|S|" Then 
05.
        If Geschrieben < Anzahl Then 
06.
            Ausgabe.WriteLine Z 
07.
            Geschrieben = Geschrieben + 1 
08.
            'If Geschrieben >= Anzahl Then Exit For 
09.
        End If 
10.
    End If 
11.
Next
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
Bitte warten ..
Mitglied: Turrex0100
16.01.2009 um 19:32 Uhr
@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
Bitte warten ..
Mitglied: suse-5-0
20.01.2009 um 11:51 Uhr
01.
C:\>grep -v "^|S|" csvtest.txt 
02.
XWXX|G|BA 963|Rechner|2009-01-15|07:15||||| 
03.
XWXX|G|BA 963|Rechner|2009-01-15|07:15|||| 
04.
XWXX|G|BA 963|Rechner|2009-01-15|07:15||||| 
05.
|XWXX|G|BA 963|Rechner|2009-01-15|07:15||||| 
06.
XWXX|G|BA 963|Rechner|2009-01-15|07:15||||| 
07.
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/
Bitte warten ..
Mitglied: bastla
20.01.2009 um 14:36 Uhr
@suse-5-0
In diesem Fall genügte (wäre nicht VBS gefragt gewesen) auch die CMD-Shell:
findstr /v "^|S|" csvtest.txt
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Sed - Zeile mit bestimmten Anfang löschen
gelöst Frage von PanubuBatch & Shell2 Kommentare

Hallo zusammen, ich habe schon mal ein wenig mit sed "herumgespielt" aber noch nicht wirklich zu dem Ergebnis gekommen, ...

Batch & Shell
Bestimmte Zeilen mit einem Batch-Script löschen
gelöst Frage von Dnis822Batch & Shell1 Kommentar

Hallo zusammen, ich stehe vor folgendem Problem: ich möchte bestimmte Zeilen in einer Datei löschen. Folgendes habe ich bereits ...

VB for Applications
VBS Zeilen in Textfile suchen und nur nach erfüllten Kriterien löschen
Frage von Calim3roVB for Applications6 Kommentare

Hallo zusammen Ich gelange wieder mal mit einer Bitte an euch. Kurze Erläuterung: In einem File habe ich Zeichenböcke: ...

Batch & Shell
Batch: bestimmten string aus einer Zeile in txt löschen
Frage von Vit1985Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei und dort möchte ich einen bestimmten string löschen! Beispielzeile: Command: Hallo, wie Ich möchte ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 106 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless8 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing7 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...