X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=diddohs.hs;h=c9ec4059c161c3178f0bcd6e8f1e25e0d7973780;hb=fb819c7f223632dd5baadebbfb6ad6732458390d;hp=7ee35cd3dad1b4bb50236cdd69cb778f08cd6ca8;hpb=d38b5df5b924ba9d04e1b5babf28df41883465cd;p=user%2Fhenk%2Fcode%2Fhaskell%2Fdiddohs.git diff --git a/diddohs.hs b/diddohs.hs index 7ee35cd..c9ec405 100644 --- a/diddohs.hs +++ b/diddohs.hs @@ -3,38 +3,34 @@ import Data.DateTime( parseDateTime, startOfTime, diffSeconds, formatDateTime ) import Data.List( zip4, zipWith4, transpose ) import Data.List.Split( splitOn ) import Data.Maybe( fromJust, fromMaybe ) +import Data.Monoid( mempty ) import Data.Time.Clock( secondsToDiffTime ) +import Options.Applicative( execParser, info, strOption, long ) import System.Environment( getArgs ) -import Text.Printf( printf ) +import HMSTime( HMSTime(..), secondsToHMS ) +import Diddo.Entry( DiddoEntry(..) ) -data HMSTime = HMSTime { hours :: Integer, minutes :: Integer, seconds :: Integer } -instance Show HMSTime where - show (HMSTime h m s) = printf "%d:%02d:%02d" h m s +data DiddoOpts = DiddoOpts + { inDateFmt :: String + , inFile :: String + } -secondsToHMS :: Integer -> HMSTime -secondsToHMS seconds = HMSTime h m s where - (mLeft, s) = seconds `divMod` 60 - (h, m) = mLeft `divMod` 60 - -data DiddoEntry = DiddoEntry { start :: String - , finish :: String - , delta :: HMSTime - , entry :: String - } -instance Show DiddoEntry where - show (DiddoEntry start finish delta entry) = printf "%s;%s;%s;%s" start finish (show delta) entry - -main :: IO () -main = do - logfile_name : timestring_format : _ <- getArgs - logfile_lines_split <- map (splitOn ";") . lines <$> readFile logfile_name - - let [timestrings_finish +mainWithOpts :: DiddoOpts -> IO () +mainWithOpts opts = do + [timestrings_finish , entries - ] = transpose logfile_lines_split - utcTimes_finish = map (fromMaybe (error "Input data broken.") . parseDateTime timestring_format) timestrings_finish + ] <- transpose . map (splitOn ";") . lines <$> readFile (inFile opts) + let utcTimes_finish = map (fromMaybe (error "Input data broken.") . parseDateTime (inDateFmt opts)) timestrings_finish entry_deltas_HMMSS = zipWith (\x y -> secondsToHMS $ diffSeconds x y) utcTimes_finish (startOfTime : init utcTimes_finish) diddos_summarized = zipWith4 DiddoEntry ("" : init timestrings_finish) timestrings_finish entry_deltas_HMMSS entries mapM_ print diddos_summarized +main :: IO () +main = execParser opts >>= mainWithOpts + where + opts = info parser mempty + parser = DiddoOpts + <$> strOption ( long "indateform" ) + <*> strOption ( long "infile" ) +