csv-nptools-0.2.0: csv-reformat.hs
import Control.Arrow
import System.Environment
import System.Console.GetOpt
import Database.TxtSushi.FlatFile
import Utils
reformat :: (String, String) -> FilePath -> IO ()
reformat (inDelim, outDelim)
= (putStr . formatTable outFormat . parseTable inFormat =<<)
. getContentsFromFileOrStdin
where inFormat = mkFormat inDelim
outFormat = mkFormat outDelim
mkFormat delim = Format "\"" delim ["\n","\r","\r\n","\n\r"]
type Settings = (String, String)
type Flag = Settings -> Settings
options :: [OptDescr Flag]
options =
[ Option "d" [] (ReqArg (first . const . evalStr) "STRING") "Input delim (default ',')"
, Option "D" [] (ReqArg (second . const . evalStr) "STRING") "Output delim (default 0xfe)"
]
usage :: String -> a
usage msg = error $ unlines [msg, usageInfo header options]
where header = "Usage: csv-reformat [-d <input-delim>] [-D <output-delim>] [<file-or-dash>]"
main :: IO ()
main = do args <- getArgs
let (flags, nonopts, errs) = getOpt Permute options args
opts = foldr ($) (",", "\254") flags
err = usage (concat errs)
if null errs then reformat opts (getInput err nonopts)
else err