thorti86
Goto Top

per Batch Zeichen in Textzeilen einfügen

Hallo,

ich möchte gerne txt Dateien mit gleichem Aufbau (Satzlänge immer gleich) per Batch wie folgt ändern:


Ursprünglicher Aufbau
43201 10090916150400100002023 4.171117
43201 10090911261700400006320 24.54246666


gewünschter Aufbau
43201 10.09.0916:15:0400100002023 4.171117
43201 10.09.0911:26:1700400006320 24.54246666


Ziel soll es sein, dass an Stelle 13 + 15 ein Punkt (.) und an Stelle 19 + 21 ein Doppelpunkt (face-smile eingesetzt wird.

Hat jemand ein Vorschlag, wie man dies lösen kann? Habe es schon mit dem for-Befehl versucht - leider ohne Erfolg.


Danke im Voraus.

Content-Key: 125346

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: Biber
Biber Sep 19, 2009 at 18:09:28 (UTC)
Goto Top
Moin thorti86,

willkommen im Forum.

Bitte in diesem Seitenarm des Forums kein "Danke im Voraus".

Du kannst die Zeilen im Batch jeweils als eine ganze Zeile einlesen, in eine Variable speichern und dann mit Substring-Funktionen aus Teilen dieser Variablen eine neue Zeile zusammenbraten.

Lösungsskizze:
@echo off & setlocal
FOF /F "delims=" %%i in ("D:\EineDatei.txt") do set "line=%%" & call:ProcessLine  
goto :eof

:processline In %line% ist je eine ganze Zeile
Echo %line:~0,12%.%%line:~13,2%.%line:~15,2% usw.
goto :eof

Jeweils ein %line:~0,12% ist zu lesen als "Teilstring von %line% von Pos. 0 Länge 2 Zeichen.

Kannst ja mal, wenn der Ansatz so funktioniert, das Skript posten, meins ist nur eine Skizze.

Grüße
Biber
Member: bastla
bastla Sep 19, 2009 at 18:21:29 (UTC)
Goto Top
Hallo thorti86 und willkommen im Forum!

Etwa so (allerdings auf Basis Deiner Beispiele und nicht Deiner Angabe, daher Punkte an Position 9 und 11 etc):
@echo off & setlocal
set "Datei=D:\Dein.txt"  
set "Bak=bak"  

set /p Zeile1=<"%Datei%"  
if "%Zeile1:~8,1%"=="." echo Datei bereits im richtigen Format & goto :eof  

move "%Datei%" "%Datei%.%Bak%">nul  
for /f "usebackq delims=" %%i in ("%Datei%.%Bak%") do set "Zeile=%%i" & call :ProcessLine  
::del "%Datei%.%Bak%" 
goto :eof

:ProcessLine
>>"%Datei%" echo %Zeile:~,8%.%Zeile:~8,2%.%Zeile:~10,4%:%Zeile:~14,2%:%Zeile:~16%  
goto :eof
Soferne Du die ursprüngliche Datei (mit Zusatz ".bak") als Sicherung nicht benötigst, kannst Du die beiden Doppelpunkte in Zeile 10 entfernen.

Grüße
bastla

[Edit] @Biber: Was machst Du denn um diese Zeit hier? Und warum bin ich schon wieder so langsam? Nö, sag' lieber nix ... face-wink[/Edit]
Member: Biber
Biber Sep 26, 2009 at 11:29:46 (UTC)
Goto Top
Moin thorti86,

wie ist denn der Status dienes Beitrags?
Kann ein Haken dran oder hast Du Rückfragen?

Grüße
Biber