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-ID: 279391

Url: https://administrator.de/forum/zahlen-aus-textdatei-in-batch-vergleichen-279391.html

Ausgedruckt am: 07.04.2025 um 09:04 Uhr

Maveric
Maveric 06.08.2015 um 13:18:50 Uhr
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
yspke24
yspke24 06.08.2015 um 13:38:43 Uhr
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
rubberman
Lösung rubberman 06.08.2015 aktualisiert um 18:57:11 Uhr
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
yspke24
yspke24 06.08.2015 um 14:11:10 Uhr
Goto Top
@rubberman
funktioniert prima. Danke face-smile
rubberman
rubberman 06.08.2015 um 19:07:53 Uhr
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
122990
122990 06.08.2015 aktualisiert um 20:28:11 Uhr
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
yspke24
yspke24 07.08.2015 um 08:11:05 Uhr
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