packages feed

DataIndex-0.1.0: executable/Main.hs

import Data.Index
import System.Environment
import System.Exit
import Data.List

main :: IO ()
main = do
    args <- getArgs
    exe args

usage :: String
usage = "USAGE: DataIndex output.data input.dat"

exe :: [String] -> IO ()
exe [] = do 
    putStrLn usage
    exitFailure

exe [_] = do 
    putStrLn usage
    exitFailure
exe [_,_] = do 
    putStrLn usage
    exitFailure

exe (output:input:time_unit:_) = do
    content <- readFile input
    let dat = loadData content
    let unit = read time_unit :: Float
    save output (addTime dat unit)

loadData :: String -> [[Float]]
loadData content = fmap ((fmap read) . words) (lines content)

array2str :: Show a => [[a]] -> String 
array2str [] = ""
array2str array = aux array []
    where
        aux :: Show a => [[a]] -> [String] -> String
        aux [] accum = intercalate "\n" (reverse accum)
        aux (x:xs) accum = aux xs ((unwords (map show x)):accum)

save :: Show a => String -> [[a]] -> IO ()
save output_file dat = do
    writeFile output_file (array2str dat)