stev
Goto Top

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 ?

Content-Key: 101555

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: bastla
bastla Nov 11, 2008 at 18:58:34 (UTC)
Goto Top
Hallo Stev!

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 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