bodor21
Goto Top

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

Content-Key: 128292

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

Printed on: April 23, 2024 at 19:04 o'clock

Member: Marwed
Marwed Oct 30, 2009 at 10:06:35 (UTC)
Goto Top
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
Member: Farbauti
Farbauti Oct 30, 2009 at 12:16:37 (UTC)
Goto Top
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:

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%
)
Mit %%i = Code:Polizei=NOTRUF110
%%j = Region=...
%%k = NR=...

Gruß, Farbauti.
PS: Batch und Patch sind zwei verschiedene Sachen ;)
Member: bastla
bastla Oct 30, 2009 at 14:16:15 (UTC)
Goto Top
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 face-wink), 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
Member: Marwed
Marwed Oct 30, 2009 at 16:59:29 (UTC)
Goto Top
.. stimmt, so its's eleganter, kürzer !

WENN die Zeilen alle so schön fein hübsch gleich sind ... face-smile
Falls nicht, ist meine (umständlichere) Methode flexibler ...
Eben je nach Bedarf.
Marwed
face-smile
Member: bodor21
bodor21 Oct 30, 2009 at 21:32:13 (UTC)
Goto Top
Hallo,

@all
das mit den letzten 15. Zeichen oder ab den 34 Zeichen löschen war nur ein Beispiel um den Batch universal zu gestalten.
So kann ich ihn vielleicht einfach nach meinen Dateien anpassen, die ich bearbeiten will.
Ich hatte vor Monaten schon einmal eine ähnliche Anfrage zu Thema gestellt, doch die Lösung war mir im Nachhinein zu umständlich.
Jetzt bin ich mal wieder an den Thema dran und hab mir überlegt, das es mir reichen würde automatisch zu kürzen und den Rest, der ist dann in Jeder Zeile gleich, mit der Ersetzfunktion des Editors zu bearbeiten.
Leider bin ich ein absoluter Anfänger in Batchprogrammierung und kann nicht viel Zeit zum Erlernen der Batchprogrammierung stecken, wenn ich nur 2 oder 3 Batchfiles in 2 Jahren benötige. Sorry wenn ich euch dafür bemühe und mir deswegen böse sein könntet.
Den Unterschied zwischen Patchen und Batchdatei kenne ich genau, nur meine Finger können das beim Schreiben nicht immer trennen face-smile)

Also aus

Code:Polizei=NOTRUF110,Region=134,NR=27873,Breite=E361CC0;

soll

Code:Polizei=NOTRUF110,Region=134;

werden.
Ja man kann auch sagen ab dem 2. Komma jede Zeile abschneiden und ein Semikolon als letztes Zeichen setzten.
Wenn das noch einfacher ist, dann prima, bin ich nur nicht drauf gekommen.

Ich hoffe die Sache etwas entwirrt zu haben.

Viele Grüße

Bodor21
Member: bastla
bastla Oct 31, 2009 at 07:19:45 (UTC)
Goto Top
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:
@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%"  
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