spreadsheet-0.1.3.9: example/CSVReplace.hs
module Main where
import qualified CSVReplace.Option as Option
import qualified Options.Applicative as OP
import Shell.Utility.Exit (exitFailureMsg)
import qualified Data.Spreadsheet as Sheet
import qualified Data.List.HT as ListHT
import qualified Control.Monad.Exception.Asynchronous as AExc
import Control.Applicative ((<$>), )
import qualified Data.Foldable as Fold
import Data.Foldable (forM_, )
replaceRow :: String -> [String] -> [String] -> String
replaceRow template names row =
ListHT.multiReplace (filter (not . null . fst) $ zip names row) template
replace :: String -> [String] -> Sheet.T -> String
replace template names = concatMap (replaceRow template names)
main :: IO ()
main = do
opt <- OP.execParser $ Option.info Option.parser
template <- Option.readTemplate opt
sheet <-
Sheet.fromString (Option.quotation opt) (Option.delimiter opt) <$>
getContents
case AExc.result sheet of
[] -> exitFailureMsg "empty CSV input"
names:rows ->
case Option.multiFile opt of
Nothing -> putStr $ replace template names rows
Just filePattern ->
forM_ rows $ \row ->
writeFile (replaceRow filePattern names row) $
replaceRow template names row
Fold.mapM_ exitFailureMsg $ AExc.exception sheet