Textfile bis Suchwort (bestehend aus Sonderzeichen) löschen
Den Inhalt eines TXT-Files zu bearbeiten bringe ich noch nicht, wenn es aber um Sonderzeichen geht, beiße ich auf Granit
Hallo Zusammen,
hallo Batch-Meister,
ich versuche ein TXT-File automatisiert zu bearbeiten. Ziel ist es, alles ausgehend vom Beginn der Text-Datei bis zu einem bestimmten Suchstring zu löschen.
Problem dabei, es handelt sich bei dieser Text-Datei um einen Druckjob (prn-File), der somit jede Menge Sonderzeichen enthält. Auch der Suchstring bis zu dem alles gelöscht werden soll besteht aus Sonderzeichen, die über die CMD nicht verarbeitbar ist
Ich habe es nun mit verschiedensten Utilitys versucht (Gnu, editini, etc.) - leider bis jetzt alles ohne Erfolg. Da der Suchstring an sich ja schon aus Sonderzeichen besteht, habe ich meine Suche auf Tools fokusiert, die Ihre Befehle auch über eine Befehl-Txt-Datei annehmen und nicht auf die Übergabe der Befehle innerhalb der CMD angewiesen sind.
Auch ein Maskieren der Sonderzeichen half leider nicht.
Da die Batch an sich schon noch mehr ausführt, wäre ich gerne bei einer Batch-Datei geblieben. - Habt ihr mir da eine Idee, ein externes Tool, etc.?
Für einen Tipp wäre ich euch sehr dankbar.
smileyman
Hallo Zusammen,
hallo Batch-Meister,
ich versuche ein TXT-File automatisiert zu bearbeiten. Ziel ist es, alles ausgehend vom Beginn der Text-Datei bis zu einem bestimmten Suchstring zu löschen.
Problem dabei, es handelt sich bei dieser Text-Datei um einen Druckjob (prn-File), der somit jede Menge Sonderzeichen enthält. Auch der Suchstring bis zu dem alles gelöscht werden soll besteht aus Sonderzeichen, die über die CMD nicht verarbeitbar ist
Ich habe es nun mit verschiedensten Utilitys versucht (Gnu, editini, etc.) - leider bis jetzt alles ohne Erfolg. Da der Suchstring an sich ja schon aus Sonderzeichen besteht, habe ich meine Suche auf Tools fokusiert, die Ihre Befehle auch über eine Befehl-Txt-Datei annehmen und nicht auf die Übergabe der Befehle innerhalb der CMD angewiesen sind.
Auch ein Maskieren der Sonderzeichen half leider nicht.
Da die Batch an sich schon noch mehr ausführt, wäre ich gerne bei einer Batch-Datei geblieben. - Habt ihr mir da eine Idee, ein externes Tool, etc.?
Für einen Tipp wäre ich euch sehr dankbar.
smileyman
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143447
Url: https://administrator.de/contentid/143447
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo smileyman!
Falls es keine Einwände gegen die Verwendung eines (vom Batch selbst erzeugten) VBScripts gibt, etwa so:
Hinweise:
Es wird in diesem Entwurf nicht geprüft, ob die Datei mit dem Suchtext (diese darf nur den Suchstring ohne abschließende Zeilenschaltung enthalten) bzw die Druckdatei vorhanden sind.
Soferne die Druckdatei nur Text mit Sonderzeichen enthält (also keine reine Binärdarstellung ist), sollte das Script damit zurecht kommen.
Die Druckdatei wird unmittelbar (ohne Erstellung einer Sicherungskopie) verändert - daher nur mit einer Kopie testen.
Auch der Suchstring wird gelöscht - wenn dieser erhalten bleiben soll, dann folgende Zeile 7 verwenden:
Grüße
bastla
Falls es keine Einwände gegen die Verwendung eines (vom Batch selbst erzeugten) VBScripts gibt, etwa so:
@echo off & setlocal
set "Suche=D:\Suche.txt"
set "Datei=D:\Druckdatei.prn"
set "D=%Temp%\DelFromFile.vbs"
>%D% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:D=fso.OpenTextFile(a(0)).ReadAll
>>%D% echo F=a(1):T=fso.OpenTextFile(F).ReadAll:If InStr(T,D)^>0 Then fso.CreateTextFile(F).Write Split(T,D)(1)
cscript //nologo %D% "%Suche%" "%Datei%"
Es wird in diesem Entwurf nicht geprüft, ob die Datei mit dem Suchtext (diese darf nur den Suchstring ohne abschließende Zeilenschaltung enthalten) bzw die Druckdatei vorhanden sind.
Soferne die Druckdatei nur Text mit Sonderzeichen enthält (also keine reine Binärdarstellung ist), sollte das Script damit zurecht kommen.
Die Druckdatei wird unmittelbar (ohne Erstellung einer Sicherungskopie) verändert - daher nur mit einer Kopie testen.
Auch der Suchstring wird gelöscht - wenn dieser erhalten bleiben soll, dann folgende Zeile 7 verwenden:
>>%D% echo F=a(1):T=fso.OpenTextFile(F).ReadAll:If InStr(T,D)^>0 Then fso.CreateTextFile(F).Write D^&Split(T,D)(1)
bastla
Hallo smileyman!
Vielleicht nur einmal eine kurze Erkklärung zum Script - in etwas weniger komprimierter Form sähe das so aus:
Noch ein Hinweis: Exakter wäre es, bei "
Auf dieser Basis solltest Du die gewünschte Variante eigentlich selbst hinbekommen - falls nicht, sag Bescheid ...
Grüße
bastla
Vielleicht nur einmal eine kurze Erkklärung zum Script - in etwas weniger komprimierter Form sähe das so aus:
Set fso=CreateObject("Scripting.FileSystemObject") 'FileSystemObject für Dateizugriffe erzeugen
Set a=WScript.Arguments 'übergebenen Argumente in Array a übernehmen
D=fso.OpenTextFile(a(0)).ReadAll 'gesamten Suchstring aus der Datei lt erstem Parameter (= a(0)) in die String-Variable D einlesen
F=a(1) 'Dateipfad aus zweitem Parameter als Variable speichern
T=fso.OpenTextFile(F).ReadAll 'gesamten Inhalt der Druckdatei in die String-Variable T einlesen
'Vorkommen des Suchstrings in der Druckdatei prüfen;
'wenn enthalten, Suchstring als "Trennzeichen" verwenden, Druckdatei aufsplitten und
'nur den zweiten Teil (Index 1, da nullbasiert) in die Druckdatei zurückschreiben -
'dabei aber vorne noch den Suchstring D anfügen (da dieser als Trennzeichen verwendet wird,
'enthält Split(T,D)(0) den Text vor dem Suchstring - der Inhalt von D "verschwindet" ...)
If InStr(T,D)>0 Then fso.CreateTextFile(F).Write D & Split(T,D)(1)
Split
" mit dem zusätzlichen Argument "2" dafür zu sorgen, dass nur zwei Teile entstehen (falls der Suchstring mehrmals vorkommen sollte, wird so nur beim ersten Vorkommen getrennt) - die letzte Zeile sähe dann so aus:If InStr(T,D)>0 Then fso.CreateTextFile(F).Write D & Split(T,D,2)(1)
Grüße
bastla
Moin bastla,
Wozu? Einfach "D" (=Suchstring) und "T" (zu durchsuchenden Text) jeweils nochmal mit StrReverse() umdrehen, der Rest kann bleiben..
Ach ja, am Schluss viellecht nochmal "T" zurückdrehen mit StrReverse()...
Grüße
Biber
Wozu? Einfach "D" (=Suchstring) und "T" (zu durchsuchenden Text) jeweils nochmal mit StrReverse() umdrehen, der Rest kann bleiben..
Ach ja, am Schluss viellecht nochmal "T" zurückdrehen mit StrReverse()...
Grüße
Biber
Hallo Biber!
Wozu? Weil ich mir nicht ganz sicher bin, was ich von "Alles beibehalten bis auf Suchtext bis Ende löschen" halten soll - wenn das wirklich nur heißt, den Teil von T ab dem letzten Auftreten von D zu verwerfen, genügt ein "
Grüße
bastla
P.S.: Die Idee mit "
Wozu? Weil ich mir nicht ganz sicher bin, was ich von "Alles beibehalten bis auf Suchtext bis Ende löschen" halten soll - wenn das wirklich nur heißt, den Teil von T ab dem letzten Auftreten von D zu verwerfen, genügt ein "
InStrRev()
" - also etwa (als Ersatz für die Zeile 11):P = InStrRev(T,D)
If P > 0 Then fso.CreateTextFile(F).Write Left(T, P - 1)
bastla
P.S.: Die Idee mit "
StrReverse()
" ist aber auch nicht ohne ...