jabali07
Goto Top

Einen definierte Anzahl Zeichen aus den Zeilen einer Textdatei entfernen

Moin zusammen,

vielleicht hat ja jemand von Euch eine Idee für mein Problem...

Aus einem Prozeß, auf den ich leider keinen Einfluss habe, erhalte ich täglich eine Textdatei, Namens "Checkcodes.txt".
In jeder Zeile der Textdatei muss stets das 16. bis einschließlich 23.Zeichen entfernt (ausgeschnitten) werden, um die Datei weiter verwursten zu können.

Beispielzeile:

Aus dem Prozeß kommt: (Der Zeitcode ist dummerweise immer doppelt vorhanden.)

XTLJ_ 10/02/07 12:16:40 12:16:40 12 XCOO7A2H1W.FR2


So muss es später aussehen:

XTLJ_ 10/02/07 12:16:40 12 XCOO7A2H1W.FR2


Eine aufwendige und zitterige Handarbeit, die meine Haare ergrauen läßt.

Die Anzahl der Zeilen dieser täglich neu erstellten Textdatei variiert leider immer.
Kann man da trotzdem eine Batch-Routine finden, die diese Aufgabe bewältigt?

Herzliche Grüße und vielen Dank vorab für Eure Mühe
Jabali07

Content-ID: 71779

Url: https://administrator.de/forum/einen-definierte-anzahl-zeichen-aus-den-zeilen-einer-textdatei-entfernen-71779.html

Ausgedruckt am: 23.12.2024 um 11:12 Uhr

miniversum
miniversum 24.10.2007 um 12:33:22 Uhr
Goto Top
Wenn du immer genau diese anzahl an Zeichen wilslt dann versuchs mal so:
@echo off
set "infile=c:\eingangsdatei.txt"
set "outfile=c:\ausgangsdatei.txt"
FOR /F "delims=" %%l in ("%infile%") do echo %%l:~0,15%%l:~16>>"%outfile%"

Wenn das Format immer so bleibt und du dich an den Leerstellen orientieren kannst dann kannst dus so versuchen:
@echo off
set "infile=c:\eingangsdatei.txt"
set "outfile=c:\ausgangsdatei.txt"
FOR /F "tokens=1,2,3,5,6 delims= " %%a in ("%infile%") do echo %%a %%b %%c %%d %%e %%f>>"%outfile%"

miniverusm
ITwissen
ITwissen 24.10.2007 um 13:27:26 Uhr
Goto Top
Falls das OS zufaelligerweise GNU/Linux waere, geht es so:

cut -b1-15,24- < Checkcodes.txt > output.txt
bastla
bastla 24.10.2007 um 21:27:34 Uhr
Goto Top
@miniversum
Da für Laufvariable die zeichenweise Zerlegung nicht vorgenommen werden kann, musst Du die eingelesene Zeile zunächst einer weiteren Variable zuweisen, was (zur Vermeidung der "delayedexpansion") in einem Unterprogramm erfolgen sollte, also etwa:
@echo off & setlocal
set "infile=C:\Checkcodes.txt"  
set "outfile=C:\Checkcodes_cut.txt"  
if exist "%outfile%" del "%outfile%"  
FOR /F "usebackq delims=" %%L in ("%infile%") do call :ProcessLine "%%L"  
goto :eof

:ProcessLine
set "Line=%~1"  
(echo %Line:~0,15%%Line:~24%)>>"%outfile%"  

Die Variante 2 benötigt auch noch kleinere Anpassungen:
@echo off & setlocal
set "infile=c:\eingangsdatei.txt"  
set "outfile=c:\ausgangsdatei.txt"  
if exist "%outfile%" del "%outfile%"  
FOR /F "usebackq tokens=1,2,3,5,6" %%a in ("%infile%") do (echo %%a %%b %%c %%d %%e)>>"%outfile%"  

Grüße
bastla
jabali07
jabali07 25.10.2007 um 11:41:27 Uhr
Goto Top
@all: Herzlichen Dank für die Mühe und die prompte Hilfe an alle.

Den zweiten Vorschlag von miniverusm hatte ich mir gestern noch "zurechtgeschüttelt". Funktioniert bestens.

Die beiden 'batches' von bastla habe ich dann heute auch laufen lassen. Simply Perfekt!

Eine riesen Arbeitserleichterung für mich. Nochmals Dankeschön!

Gruß jabali07