Letzen 15 Zeichen oder die ersten 34 Zeichen einer Zeile in .txt löschen
Hallo,
es geht mal wieder um Zeilen per Patch zu editieren, die Suchfunktion ergab leider zu meinem Problem keine Lösung.
Gruß
bodor21
Ich möchte per Patch Datei die letzten 15 Zeichen jeder Zeile löschen.
Es geht aber auch alles ab dem 34 Zeichen jeder Zeile zu löschen, je nachdem was einfacher ist.
Die Textdatei test.txt hat ca. 200 Zeilen
Der Zeilenaufbau ist wie folgt:
Code:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0;
Code:Polizei=NOTRUF110,Region=1531,NR=27873,Breite=E362C00C0;
Code:Polizei=NOTRUF110,Region=134,NR=27873,Breite=E361CC0;
.
.
.
Hinter dem letzten Zeichen ; sind noch 2 Leerzeichen, die man hier leider nicht sieht.
Die Zeilenlänge variert um max. 4 Zeichen
es geht mal wieder um Zeilen per Patch zu editieren, die Suchfunktion ergab leider zu meinem Problem keine Lösung.
Gruß
bodor21
Ich möchte per Patch Datei die letzten 15 Zeichen jeder Zeile löschen.
Es geht aber auch alles ab dem 34 Zeichen jeder Zeile zu löschen, je nachdem was einfacher ist.
Die Textdatei test.txt hat ca. 200 Zeilen
Der Zeilenaufbau ist wie folgt:
Code:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0;
Code:Polizei=NOTRUF110,Region=1531,NR=27873,Breite=E362C00C0;
Code:Polizei=NOTRUF110,Region=134,NR=27873,Breite=E361CC0;
.
.
.
Hinter dem letzten Zeichen ; sind noch 2 Leerzeichen, die man hier leider nicht sieht.
Die Zeilenlänge variert um max. 4 Zeichen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128292
Url: https://administrator.de/contentid/128292
Ausgedruckt am: 05.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo,
Schema:
- Datei zeilenweise einlesen
- Prüfen, ob sie zu filtern ist (falls nötig)
- Filtern und Ausgabe
Verzögerte Variablenerweiterung aktivieren: SETLOCAL ENABLEDELAYEDEXPANSION
Beispiele:
Zeile Einlesen: for /F "tokens=*" %%i in ( 'type %SFILE%' ) do (
Prüfen: for /F "tokens=*" %%j in ( 'echo "%%i" ^| findstr /P "Name"' ) do (
Zeile in Variable: set EINGABEZEILE=%%i
Filtern: set AUSGABEZEILE=!EINGABEZEILE:~45,-11!
(Beginne beim 46. Zeichen (Offset=45) von links und übernimm alle Zeichen bis auf die letzten 11.)
Ausgabe: ... in der mitleren Schleife mit >> in Ausgabedatei ablegen.
Weitere Einzelheiten findest Du auf Deinem eigenen Rechner in der Befehlszeilenrefenz (C:\WINDOWS/Help/ntcmds.chm)
Gruß,
Marwed
Schema:
- Datei zeilenweise einlesen
- Prüfen, ob sie zu filtern ist (falls nötig)
- Filtern und Ausgabe
Verzögerte Variablenerweiterung aktivieren: SETLOCAL ENABLEDELAYEDEXPANSION
Beispiele:
Zeile Einlesen: for /F "tokens=*" %%i in ( 'type %SFILE%' ) do (
Prüfen: for /F "tokens=*" %%j in ( 'echo "%%i" ^| findstr /P "Name"' ) do (
Zeile in Variable: set EINGABEZEILE=%%i
Filtern: set AUSGABEZEILE=!EINGABEZEILE:~45,-11!
(Beginne beim 46. Zeichen (Offset=45) von links und übernimm alle Zeichen bis auf die letzten 11.)
Ausgabe: ... in der mitleren Schleife mit >> in Ausgabedatei ablegen.
Weitere Einzelheiten findest Du auf Deinem eigenen Rechner in der Befehlszeilenrefenz (C:\WINDOWS/Help/ntcmds.chm)
Gruß,
Marwed
Hallo,
wenn ich's richtig verstanden habe, willst du den Eintrag "Breite...." löschen.
Da deine Datei schon so hübsch aufbereitet ist, bieten sich die Kommas als Trennzeichen an:
Mit %%i = Code:Polizei=NOTRUF110
%%j = Region=...
%%k = NR=...
Gruß, Farbauti.
PS: Batch und Patch sind zwei verschiedene Sachen ;)
wenn ich's richtig verstanden habe, willst du den Eintrag "Breite...." löschen.
Da deine Datei schon so hübsch aufbereitet ist, bieten sich die Kommas als Trennzeichen an:
set INFILE=test.txt
set OUTFILE=testout.txt
FOR /F "eol=; tokens=1,2,3 delims=, " %%i in (%INFILE%) do (
echo %%i,%%j,%%k >> %OUTFILE%
)
%%j = Region=...
%%k = NR=...
Gruß, Farbauti.
PS: Batch und Patch sind zwei verschiedene Sachen ;)
Weitere Einzelheiten findest Du auf Deinem eigenen Rechner in der Befehlszeilenrefenz (C:\WINDOWS/Help/ntcmds.chm)
... und (wenn Du das wirklich so machen wolltest) schau Dir auch gleich "setlocal enabledelayedexpansion
" an ...[Edit] @Marwed: Entweder hatte ich Deinen Hinweis zu "delayedExpansion" überlesen (ist ja auch so unscheinbar formatiert ), oder Du hast diesen erst nachträglich hinzugefügt - anyhow, doppelt hält eh besser ... [/Edit]
Sinnvoller scheint allerdings auch mir die von Farbauti angesprochene Möglichkeit, die Zeile anhand der enthaltenen Kommata zu zerlegen, wobei mir allerdings das angestrebte Ziel noch nicht ganz klar ist: Alles ab dem 34. Zeichen zu löschen bringt auf Basis der dargestellten Beispielzeilen definitiv andere Ergebnisse als das Löschen der letzten 15 Zeichen - wie sollen daher die bearbeiteten Zeilen tatsächlich aussehen?
Grüße
bastla
Hallo bodor21!
Die Trennzeichen-Variante ist sicherlich flexibler, da eben die Zeichenanzahl dabei auch unterschiedlich sein kann. Unter Berücksichtigung der Tatsache, dass die Ausgabe immer an die Zieldatei angefügt wird, sollte eine ev bereits vorhandene Datei vorweg noch gelöscht werden - das Ganze sähe dann etwa so aus:
Wenn es tatsächlich einmal nötigt sein sollte, anhand der Zeichenanzahl aufzuteilen, hast Du mit Marweds Vorschlag eine Basis dafür.
Grüße
bastla
Die Trennzeichen-Variante ist sicherlich flexibler, da eben die Zeichenanzahl dabei auch unterschiedlich sein kann. Unter Berücksichtigung der Tatsache, dass die Ausgabe immer an die Zieldatei angefügt wird, sollte eine ev bereits vorhandene Datei vorweg noch gelöscht werden - das Ganze sähe dann etwa so aus:
@echo off & setlocal
set "INFILE=D:\Nur ein Test\test.txt"
set "OUTFILE=D:\Nur ein Test\testout.txt"
del "%OUTFILE%" 2>nul
FOR /F "usebackq tokens=1-2 delims=," %%i in ("%INFILE%") do echo %%i,%%j;>>"%OUTFILE%"
Grüße
bastla