Text in Datei auslesen, vergleichen und evtl. ersetzen
Hallo,
habe folgende Problemstellung:
In einem Verzeichnis werden automatisch Dateien geschrieben.
Diese beinhalten in Zeile 1 in der Spalte 91 bis 99 ein Datum (Datum 1)
Ich möchte dieses Datum per Script auslesen und dann mit dem Datum in Zeile 3 Spalte 112 - 120 (Datum 2) vergleichen.
Ist Datum 2 älter als Datum 1 dann ersetze Datum 2 mit Datum 1.
Das Datumsformat ist ddmmyyyy. Ich würde dieses Datum in drei Variablen einlesen und dann Rückwarts wieder zusammen setzen:
Datum_1=Jahr_1*10000+Monat_1*100+Tag_1
Datum_2=Jahr_2*10000+Monat_2*100+Tag_2
So wäre mein Ansatz.......
Hat jemand eine Idee, wie ich das lösen kann ?
habe folgende Problemstellung:
In einem Verzeichnis werden automatisch Dateien geschrieben.
Diese beinhalten in Zeile 1 in der Spalte 91 bis 99 ein Datum (Datum 1)
Ich möchte dieses Datum per Script auslesen und dann mit dem Datum in Zeile 3 Spalte 112 - 120 (Datum 2) vergleichen.
Ist Datum 2 älter als Datum 1 dann ersetze Datum 2 mit Datum 1.
Das Datumsformat ist ddmmyyyy. Ich würde dieses Datum in drei Variablen einlesen und dann Rückwarts wieder zusammen setzen:
Datum_1=Jahr_1*10000+Monat_1*100+Tag_1
Datum_2=Jahr_2*10000+Monat_2*100+Tag_2
So wäre mein Ansatz.......
Hat jemand eine Idee, wie ich das lösen kann ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101555
Url: https://administrator.de/contentid/101555
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
1 Kommentar
Hallo Stev!
Da Du ja ohnehin die einzelnen Datumsbestandteile als Teilstrings benötigt, kannst Du das Datum auch ohner Rechnerei gleich wieder zusammensetzen, zB
Da Deine Beschreibung hinsichtlich der Positionen nicht ganz eindeutig sind (die Spalten 91 - 99 umfassen 9 Zeichen), bin ich davon ausgegangen, dass die Anfangsposition korrekt ist (und daher vom Zeilenanfang bis zur Angabe des Wertes für dem "Tag" 90 Zeichen zu überspringen sind).
Da nicht gleichzeitig aus der Datei gelesen und in sie geschrieben werden kann, entsteht als "Abfallprodukt" eine Sicherungskopie (mit dem Zusatz ".bak") - falls diese nicht benötigt wird, das "REM" vor dem Löschbefehl entfernen.
Grüße
bastla
Da Du ja ohnehin die einzelnen Datumsbestandteile als Teilstrings benötigt, kannst Du das Datum auch ohner Rechnerei gleich wieder zusammensetzen, zB
@echo off & setlocal
set "bak=.bak"
for %%i in (D:\Dateien\*.txt) do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set /p Zeile1=<%1
set Zeile3=
for /f "usebackq skip=2 delims=" %%i in (%1) do if not defined Zeile3 set "Zeile3=%%i"
set Datum1=%Zeile1:~94,4%%Zeile1:~92,2%%Zeile1:~90,2%
set Datum3=%Zeile3:~115,4%%Zeile3:~113,2%%Zeile3:~111,2%
if %Datum1% leq %Datum3% goto :eof
set Zeile2=
for /f "usebackq skip=1 delims=" %%i in (%1) do if not defined Zeile2 set "Zeile2=%%i"
move %1 "%~1%bak%"
>%1 echo %Zeile1%
>>%1 echo %Zeile2%
>>%1 echo %Zeile3:~,111%%Zeile1:~90,8%%Zeile3:~119%
>>%1 more +3 "%~1%bak%"
REM del "%~1%bak%"
goto :eof
Da nicht gleichzeitig aus der Datei gelesen und in sie geschrieben werden kann, entsteht als "Abfallprodukt" eine Sicherungskopie (mit dem Zusatz ".bak") - falls diese nicht benötigt wird, das "REM" vor dem Löschbefehl entfernen.
Grüße
bastla