]> git.netwichtig.de Git - user/henk/code/haskell/diddohs.git/blob - diddohs.hs
On branch master
[user/henk/code/haskell/diddohs.git] / diddohs.hs
1 import Control.Applicative( (<$>), (<*>), liftA, liftA2 )
2 import Data.DateTime( parseDateTime, startOfTime, diffSeconds, formatDateTime )
3 import Data.List( zip4, zipWith4, transpose )
4 import Data.List.Split( splitOn )
5 import Data.Maybe( fromJust, fromMaybe )
6 import Data.Monoid( mempty )
7 import Data.Time.Clock( secondsToDiffTime )
8 import Options.Applicative( execParser, info, strOption, long )
9 import System.Environment( getArgs )
10 import HMSTime( HMSTime(..), secondsToHMS )
11 import Diddo.Entry( DiddoEntry(..) )
12
13 data DiddoOpts = DiddoOpts
14   { inDateFmt :: String
15   , inFile :: String
16   }
17
18 mainWithOpts :: DiddoOpts -> IO ()
19 mainWithOpts opts = do
20   [timestrings_finish
21         , entries
22         ]                  <- transpose . map (splitOn ";") . lines <$> readFile (inFile opts)
23   let utcTimes_finish      = map (fromMaybe (error "Input data broken.") . parseDateTime (inDateFmt opts)) timestrings_finish
24       entry_deltas_HMMSS   = zipWith (\x y -> secondsToHMS $ diffSeconds x y) utcTimes_finish (startOfTime : init utcTimes_finish)
25       diddos_summarized    = zipWith4 DiddoEntry ("" : init timestrings_finish) timestrings_finish entry_deltas_HMMSS entries
26
27   mapM_ print diddos_summarized
28
29 main :: IO ()
30 main = execParser opts >>= mainWithOpts
31   where
32     opts = info parser mempty
33     parser = DiddoOpts
34       <$> strOption ( long "indateform" )
35       <*> strOption ( long "infile" )
36