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-Key: 71779

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

Printed on: April 25, 2024 at 18:04 o'clock

Member: miniversum
miniversum Oct 24, 2007 at 10:33:22 (UTC)
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
Member: ITwissen
ITwissen Oct 24, 2007 at 11:27:26 (UTC)
Goto Top
Falls das OS zufaelligerweise GNU/Linux waere, geht es so:

cut -b1-15,24- < Checkcodes.txt > output.txt
Member: bastla
bastla Oct 24, 2007 at 19:27:34 (UTC)
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
Member: jabali07
jabali07 Oct 25, 2007 at 09:41:27 (UTC)
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