import Data.List
import System.Directory
import System.Environment
import System.Exit
import System.IO
import TxtSushi.IO
import TxtSushi.Transform
import Util.IOUtil
closeAll [] = do return ()
closeAll (handle:tail) = do
hClose handle
closeAll tail
removeAll [] = do return ()
removeAll (file:tail) = do
removeFile file
removeAll tail
main = do
args <- getArgs
if (length args) <= 1
then do
hPutStrLn stderr $
"ERROR: program requires at least two arguments " ++
"(one column argument and a filename or '-')"
exitFailure
else do
contents <- getContentsFromFileOrStdin (last args)
let argsWithoutFile = init args
colIndices = map read (init args) :: [Int]
table = parseTable csvFormat contents
(partialSortTables, partialSortFileHandles, partialSortFiles) <- fileBasedSortTable colIndices table
let sortedTable = mergeAllBy (rowComparison colIndices) partialSortTables
sortedTableText = formatTable csvFormat sortedTable
putStr sortedTableText
closeAll partialSortFileHandles
removeAll partialSortFiles
return ()