txt-sushi-0.1: selectcolname.hs
import Data.List
import System.Environment
import System.Exit
import System.IO
import TxtSushi.IO
import TxtSushi.Transform
import Util.IOUtil
maybeIndexToIndexOrError :: [String] -> [Maybe Int] -> [Int]
maybeIndexToIndexOrError [] [] = []
maybeIndexToIndexOrError (name:namesTail) (Nothing:indexTail) =
error $ "Could not find column header named \"" ++ name ++ "\""
maybeIndexToIndexOrError (name:namesTail) ((Just index):indexTail) =
index:(maybeIndexToIndexOrError namesTail indexTail)
main = do
args <- getArgs
if (length args) <= 1
then do
hPutStrLn stderr $
"ERROR: program requires at least two arguments " ++
"(one column name argument and a filename or '-')"
exitFailure
else do
contents <- getContentsFromFileOrStdin (last args)
let argsWithoutFile = init args
colNames = init args
table = parseTable csvFormat contents
header = head table
maybeColIndices = [elemIndex name header | name <- colNames]
colIndices = maybeIndexToIndexOrError colNames maybeColIndices
subsetTable = selectColumns colIndices table
subsetTableText = formatTable csvFormat subsetTable
putStr subsetTableText
return ()