2016-07-13 4 views
-5

Ich habe eine Textdatei data.txt:Finden MIN, MAX, SORT und VERGLEICH in Textdatei Batch-Skript mit

Jun/2015: 1028 
Oct/2017: 2048 
Jan/2010: 9654 
Aug/2006: 5702 
Feb/2018: 1984 
Oct/2012: 7749 
May/2008: 4722 
Jul/2016: 4722 

Ich brauche eine Batch-Skript zu:

  1. Finden MIN , MAX-Wert in Datei, die Ausgabe ist:
    • MAX des Wertes ist [max Wert nach ":"], um [DATUM von max va lue]
    • MIN des Wertes [min-Wert nach ":"], um [DATUM von min-Wert]
  2. Sortieren Sie die Datei data.txt nach dem Datum Wert (sortiert Monat und Jahr der DATE zusammen, nicht nur Monat oder Jahr getrennt)
  3. DATE in Datei mit aktuellem DATUM vergleichen, wenn DATUM in Datei größer ist als aktuelles DATUM über 08 Monate, ausgegebenes DATUM mit Wert nach ":"
  4. Finde das DATUM welches den längsten Monat hatte (31 Tage im Monat) und geben diese DATE mit dem Wert nach ":"
+2

Welchen Code haben Sie bisher ausprobiert und mit welchem ​​Problem haben Sie Schwierigkeiten? – FishStix

Antwort

0
aus
  • Sie können den Wert in Text für/f-Token erhalten = 1,2 und das Ergebnis von a-z sortieren, die ersten Zeile oder letzte Zeile in Text wie der max oder min Linie bekommen.
  • -1

    Für die Berechnung der minimalen und maximalen Werte können Sie das folgende Skript verwenden (das auch den gerundeten Mittelwert bestimmt); Beachten Sie, dass dies nur für positive Ganzzahlen in einem signierten 32-Bit-Raum funktioniert. nennen wir es stats.bat:

    @echo off 
    setlocal EnableExtensions EnableDelayedExpansion 
    
    set /A "IDX=0, SUM=0" 
    set /A "MIN=(1<<31)-1, MAX=0" 
    for /F "usebackq tokens=1,2 delims=: " %%K in ("%~1") do (
        for /F "tokens=* delims=0" %%Z in ("%%L") do set "VAL=%%Z" 
        set /A "VAL+=0, IDX+=1, SUM+=VAL" 
        if !MIN! GTR !VAL! set /A "MIN=VAL" & set "MIN_DATE=%%K" 
        if !MAX! LSS !VAL! set /A "MAX=VAL" & set "MAX_DATE=%%K" 
    ) 
    set /A "AVG=(2*SUM+IDX)/(2*IDX)" 
    echo total amount: %IDX% 
    echo overall sum: %SUM% 
    echo minimum value: %MIN% ^(%MIN_DATE%^) 
    echo maximum value: %MAX% ^(%MAX_DATE%^) 
    echo average value: %AVG% ^(rounded^) 
    
    endlocal 
    exit /B 
    

    es die Textdatei als Befehlszeilenargument liefern zu benutzen:

    stats.bat "\path\to\data.txt" 
    

    Für die Beispieldatei data.txt in Ihrer Frage enthalten die Ausgabe würde wie folgt aussehen:

    total amount:  8 
    overall sum:  37609 
    minimum value: 1028 (Jun/2015) 
    maximum value: 9654 (Jan/2010) 
    average value: 4701 (rounded) 
    

    Für alle datumsbezogenen Berechnungen sollten Sie eine andere Sprache (wie PowerShell) verwenden, da cmd/ Datumsmathematik nicht unterstützt, und auch keine Sortierung nach Datum.

    +0

    Wer diese Antwort abgelehnt hat, bitte sag mir warum! – aschipfl