yspke24
Goto Top

Zahlen aus Textdatei in Batch vergleichen

Hi,

ich habe schon stundenlang im Internet gesucht, konnte aber nichts Passendes finden.

Ich habe eine Textdatei "time.log". In diese Datei werden 4x 4-stellige Zahlen geschrieben (1 Zahl pro Zeile).
Jetzt möchte ich diese 4 Zahlen miteinander vergleichen. Im Idealfall sollten diese Zahlen komplett übereinstimmen.
Sollte aber eine, oder mehrere, dieser Zahlen um mehr als 2 von den anderen Zahlen abweichen, soll eine Fehlermeldung ausgegeben werden.
Wenn sie komplett übereinstimmen, oder um weniger als 2 abweichen, soll eine Meldung erscheinen, dass alles in Ordnung ist.

Ich hoffe mir kann jemand helfen.

Vielen Dank im Voraus

LG

Content-Key: 279391

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

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

Member: Maveric
Maveric Aug 06, 2015 at 11:18:50 (UTC)
Goto Top
Moin,

wenn du einmal einen Beispieltext hast den ich mir in eine Datei kopieren kann kommen wir hier schnell zum Ziel =).

Beste Grüße
Maveric
Member: yspke24
yspke24 Aug 06, 2015 at 11:38:43 (UTC)
Goto Top
in die Textdatei werden Uhrzeiten von verschiedenen Clients geschrieben. Von diesen Zeiten werden die ":" und die Sekunden entfernt.
Es bleiben also nur Stunden und Minuten in folgender Form übrig:

1029
1029
1029
1029

Je nach Uhrzeit stehen in der Textdatei also immer unterschidliche Zahlen drin. Wenn eine/mehrere dieser Zahlen um mehr als 2 abweichen, also die Uhrzeit der Maschinen nicht übereinstimmt -> Fehlermeldung
Member: rubberman
Solution rubberman Aug 06, 2015 updated at 16:57:11 (UTC)
Goto Top
Hallo yspke24, willkommen im Forum.

Teste mal folgendes:
@echo off &setlocal
set "txtfile=test.txt"  

:: Vier Zeilen einlesen
setlocal EnableDelayedExpansion
<"!txtfile!" (  
  set /p "num1="  
  set /p "num2="  
  set /p "num3="  
  set /p "num4="  
)

:: Bubblesort
for /l %%i in (1 1 3) do (
  for %%j in ("num1,num2" "num2,num3" "num3,num4") do for /f "tokens=1,2 delims=," %%A in (%%j) do (  
    if !%%A! gtr !%%B! (
      set /a "tmpn=%%A, %%A=%%B, %%B=tmpn"  
    )
  )
)
echo sortiert: %num1% %num2% %num3% %num4%

:: Differenz zw. größtem und kleinstem Wert
set /a "diff=num4-num1"  
echo Differenz: %diff%

:: Prüfung
if %diff% gtr 2 (
  echo Fehler
) else (
  echo OK
)

pause

Grüße
rubberman
Member: yspke24
yspke24 Aug 06, 2015 at 12:11:10 (UTC)
Goto Top
@rubberman
funktioniert prima. Danke face-smile
Member: rubberman
rubberman Aug 06, 2015 at 17:07:53 (UTC)
Goto Top
Hallo yspke,

einen Einwand habe ich aber noch. So wie du schreibst, handelt es sich um Uhrzeiten. Zwischen bspw. 1059 und 1100 gibt es rechnerisch eine Differenz von 41 und nicht etwa 1. Du musst also genau aufpassen, wann deine Daten geschrieben werden, damit du diesen Fehler ausschließen kannst. Ansonsten funktioniert das nicht.

Grüße
rubberman
Mitglied: 122990
122990 Aug 06, 2015 updated at 18:28:11 (UTC)
Goto Top
Oder für die Powershell-Fraktion sähe das so aus:
$zeiten = (gc  'C:\time.log') | %{[datetime]"$($_.Substring(0,2)):$($_.Substring(2,2))"} | sort  
if ($zeiten[3] -gt $zeiten.AddMinutes(2)){
    write-host "Achtung eine Zeit überschreitet das Soll von 2 Minuten" -ForeGroundColor Yellow  
}else{
  write-host "Alle Zeiten im soll." -ForegroundColor Green  
}
Gruß grexit
Member: yspke24
yspke24 Aug 07, 2015 at 06:11:05 (UTC)
Goto Top
Hallo rubberman,

ja das habe ich schon bedacht. Die Uhrzeiten werden autimatisch 2x täglich verglichen. Die Zeit wird so eingestellt, dass es nicht zu so einem Konflikt kommen kann.
Bspw.: 1. Vergleich: 10:25 Uhr
2. Vergleich: 22.25 Uhr

Sollte es noch zu Problemen deswegen kommen (was ich nicht hoffe), werde ich das ganze noch ein bisschen umschreiben müssen.

LG