Bestimmte Textstellen (immer fest) einer Textdatei per Batch ändern
Hallo Forum,
ich habe hier eine Textdatei mit Tankstellenauswertungen. Zeilenweise sieht die Datei z.B. so aus:
A0000656000000001200000000003039860005058000000261110212500E
Aussehen soll die Datei aber nach der Bearbeitung so:
A1300656000001301200000000003039860005058000000261110212500E
Das heisst:
Die Stellen 2-3 sollen von "00" auf "13" abgeändert werden, genau wie die stellen 14-15 von "00" auf "13" abgeändert werden sollen.
Die länge des Datensatzes ist immer gleich, es soll einfach immer egal was drinsteht 2-3 und 14-15 auf "13" geändert werden, und zwar bei jeder Zeile.
dürfte normal möglich sein, da ich es mit 2-3 schon geschafft habe. (Einfach A00 durch A13 ersetzen) jedoch wünsche ich mir was handfestes welches nicht zwingend "00" als Vorlage voraussetzt.
vielen Dank für die Hilfe
mfG
Daniel
ich habe hier eine Textdatei mit Tankstellenauswertungen. Zeilenweise sieht die Datei z.B. so aus:
A0000656000000001200000000003039860005058000000261110212500E
Aussehen soll die Datei aber nach der Bearbeitung so:
A1300656000001301200000000003039860005058000000261110212500E
Das heisst:
Die Stellen 2-3 sollen von "00" auf "13" abgeändert werden, genau wie die stellen 14-15 von "00" auf "13" abgeändert werden sollen.
Die länge des Datensatzes ist immer gleich, es soll einfach immer egal was drinsteht 2-3 und 14-15 auf "13" geändert werden, und zwar bei jeder Zeile.
dürfte normal möglich sein, da ich es mit 2-3 schon geschafft habe. (Einfach A00 durch A13 ersetzen) jedoch wünsche ich mir was handfestes welches nicht zwingend "00" als Vorlage voraussetzt.
vielen Dank für die Hilfe
mfG
Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 162138
Url: https://administrator.de/contentid/162138
Ausgedruckt am: 13.11.2024 um 09:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Daniel,
dies ist nicht ganz so einfach es sei denn die ersten 15 Ziffern sind immer gleich, wovon ich erst einmal nicht ausgehe.
Aus diesem Grunde benötigst du ein parser Progamm weilches die betreffenden Positionen (2und3 sowie 14 und 15) austauscht und danach die Datei wieder schließt.
Ich würde dieses, an deiner Stelle, im VBS programmieren. Hier ein Link der dir vieleicht weiterhilft.
http://www.lockergnome.com/sqlsquirrel/2007/12/18/how-to-parse-a-text-f ...
dies ist nicht ganz so einfach es sei denn die ersten 15 Ziffern sind immer gleich, wovon ich erst einmal nicht ausgehe.
Aus diesem Grunde benötigst du ein parser Progamm weilches die betreffenden Positionen (2und3 sowie 14 und 15) austauscht und danach die Datei wieder schließt.
Ich würde dieses, an deiner Stelle, im VBS programmieren. Hier ein Link der dir vieleicht weiterhilft.
http://www.lockergnome.com/sqlsquirrel/2007/12/18/how-to-parse-a-text-f ...
Zitat von @Ralph4:
dies ist nicht ganz so einfach es sei denn die ersten 15 Ziffern sind immer gleich
dies ist nicht ganz so einfach es sei denn die ersten 15 Ziffern sind immer gleich
Wozu müssen die immer gleich sein? Muss man halt den String in Stückchen schneiden und ändern. Stört doch nicht SO arg.
Hallo @daki,
Du könntest mal folgende Batch ausprobieren:
@Echo off && setlocal enabledelayedexpansion
set Quelle=test.txt
set Ziel=test_neu.txt
for /F %%A in (%Quelle%) do (
if NOT %%A=="" (
call :procLine %%A
)
)
goto eof
:procLine
set string_0=%1
set string_1=%string_0:~0,1%
set string_2=%string_0:~3,10%
set string_3=%string_0:~15%
set string_full=%string_1%13%string_2%13%string_3%
echo %string_full%>>%Ziel%
:eof
Gruß
Snow
Moin,
angenommen es ist immer die gleiche Textdatei...
...und immer die gleichen zu ersetzenden Werte an der gleichen Stelle...
Ich hoffe, du kannst das nachvollziehen.
Gruß
edit zu langsam - dafür aber ohne das @echo off(dafür aber auch ohne setlocal)
edit² - den Einwand von Pietsch hab ich durch die ganzen Ifs vor dem Echo einfach mal vorausgesetzt - falls das nicht so wäre - wie ich es gedacht habe, einfach die ifs weg lassen.
angenommen es ist immer die gleiche Textdatei...
...und immer die gleichen zu ersetzenden Werte an der gleichen Stelle...
setlocal
for /f %%a in (C:\script\searchNreplace\zahlen\org.ini) do set line=%%a & call:searchnreplace
goto :eof
:searchnreplace
if %line:~1,2%=00 if %line:~14,2%==00 echo %line:~0,1%13%line:~4,13%13%line:~16%>>C:\script\searchNreplace\zahlen\new.ini
Ich hoffe, du kannst das nachvollziehen.
Gruß
edit zu langsam - dafür aber ohne das @echo off
edit² - den Einwand von Pietsch hab ich durch die ganzen Ifs vor dem Echo einfach mal vorausgesetzt - falls das nicht so wäre - wie ich es gedacht habe, einfach die ifs weg lassen.