Batch - String suchen und in der Datei Zeile mit berechneten Inhalt einfügen
Hallo Batch-Experten,
ich habe folgendes vor:
Meine Textdateien, welche per Job verarbeitet werden, enthalten einen String an einer oder auch mehr Stellen einer Textdatei.
Wenn der String erkannt wird, soll die Zeile kopiert, bearbeitet und unter der Fundstellenzeile eingefügt werden.
Meine Datei hat die Endung txt. Für die Erklärung nenne ich die Datei beispiel.txt.
Der String, welcher zu suchen ist, heißt AUFP und ist am Zeilenanfang.
Dann soll, wenn Stelle 84-103 mit KIP beginnt, diese Zeile dann in eine Temp.txt kopiert, und diese dann bearbeitet werden.
Bearbeitungsschritte:
- an Stelle 9-15 (Typ nummerisch mit führenden Nullen(0)) * 2 rechnen (Führende Nullen müssen vorhanden sein!)
- an Stelle 49-78 ersetzen durch String LADEHILFSMITTEL
- die Stellen 16-22 auf 000000 setzen (vorhandenen Inhalt überschreiben).
Es kann mehrere Vorkommnisse der Zeile AUFP geben, welche auch immer nach gleicher Logik verarbeitet werden sollen.
Ist dies über Batch möglich?
Und wenn, wie?
Marko
ich habe folgendes vor:
Meine Textdateien, welche per Job verarbeitet werden, enthalten einen String an einer oder auch mehr Stellen einer Textdatei.
Wenn der String erkannt wird, soll die Zeile kopiert, bearbeitet und unter der Fundstellenzeile eingefügt werden.
Meine Datei hat die Endung txt. Für die Erklärung nenne ich die Datei beispiel.txt.
Der String, welcher zu suchen ist, heißt AUFP und ist am Zeilenanfang.
Dann soll, wenn Stelle 84-103 mit KIP beginnt, diese Zeile dann in eine Temp.txt kopiert, und diese dann bearbeitet werden.
Bearbeitungsschritte:
- an Stelle 9-15 (Typ nummerisch mit führenden Nullen(0)) * 2 rechnen (Führende Nullen müssen vorhanden sein!)
- an Stelle 49-78 ersetzen durch String LADEHILFSMITTEL
- die Stellen 16-22 auf 000000 setzen (vorhandenen Inhalt überschreiben).
Es kann mehrere Vorkommnisse der Zeile AUFP geben, welche auch immer nach gleicher Logik verarbeitet werden sollen.
Ist dies über Batch möglich?
Und wenn, wie?
Marko
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80413
Url: https://administrator.de/contentid/80413
Ausgedruckt am: 15.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo loony666!
Vorweg: Es wäre sinnvoll, wenn Du die Daten nicht nur beschrieben, sondern auch einige Beispielzeilen gepostet hättest ...
Soferne ich das Ganze richtig verstanden (und in eigene Testdaten umgesetzt) habe, sollte es etwa so gehen:
Einschränkung: In dieser Version werden ev enthaltene Leerzeilen aus der Textdatei entfernt.
Solange das REM vor dem del "%Bak%" steht, bleibt die ursprüngliche Datei als Sicherungkopie mit dem Zusatz ".bak" erhalten.
Grüße
bastla
Vorweg: Es wäre sinnvoll, wenn Du die Daten nicht nur beschrieben, sondern auch einige Beispielzeilen gepostet hättest ...
Soferne ich das Ganze richtig verstanden (und in eigene Testdaten umgesetzt) habe, sollte es etwa so gehen:
@echo off & setlocal
set "Datei=D:\Beispiel.txt"
set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
for /f "usebackq delims=" %%i in ("%Bak%") do set "Zeile=%%i" & call :ProcessLine
REM del "%Bak%"
goto :eof
:ProcessLine
echo %Zeile%>>"%Datei%"
echo %Zeile%|findstr /b "AUFP">nul || goto :eof
if "%Zeile:~83,3%" neq "KIP" goto :eof
set /a "Wert=(1%Zeile:~8,7%-10000000)*2
set "WertNeu=0000000%Wert%"
set "Ersatz1=0000000"
set "Ersatz2=LADEHILFSMITTEL "
echo %Zeile:~0,8%%WertNeu:~-7%%Ersatz1%%Zeile:~22,26%%Ersatz2%%Zeile:~78%>>"%Datei%"
goto :eof
Solange das REM vor dem del "%Bak%" steht, bleibt die ursprüngliche Datei als Sicherungkopie mit dem Zusatz ".bak" erhalten.
Grüße
bastla
Hallo loony666!
Ersetze die letzten beiden Zeilen durch
Da ich die Zeilenlänge nicht kenne, habe ich als letzten Teil "%Zeile:~103%" (steht für: alles nach Position 103) hinzugefügt - sollte Deine Zeile nicht mehr als 103 Stellen haben, musst Du diesen Teil wieder entfernen.
Grüße
bastla
Ersetze die letzten beiden Zeilen durch
set "Ersatz3=201 "
echo %Zeile:~0,8%%WertNeu:~-7%%Ersatz1%%Zeile:~22,26%%Ersatz2%%Zeile:~78,5%%Ersatz3%%Zeile:~103%>>"%Datei%"
goto :eof
Grüße
bastla