packages feed

txt-sushi-0.5.1: csvtopretty.hs

-----------------------------------------------------------------------------
-- |
-- Module      :  csvtopretty
-- Copyright   :  (c) Keith Sheppard 2009-2010
-- License     :  BSD3
-- Maintainer  :  keithshep@gmail.com
-- Stability   :  experimental
-- Portability :  portable
--
-- Converts CSV input into pretty-printed output
--
-----------------------------------------------------------------------------
import Control.Monad
import System.Directory
import System.Environment
import System.IO

import Database.TxtSushi.FlatFile
import Database.TxtSushi.IOUtil

main :: IO ()
main = do
    args <- getArgs
    
    case args of
        [fileArg] -> do
            let useStdio = (fileArg == "-")
            
            file <- if useStdio then bufferStdioToTempFile else return fileArg
            
            handle1 <- openFile file ReadMode
            contents1 <- hGetContents handle1
            handle2 <- openFile file ReadMode
            contents2 <- hGetContents handle2
            
            let table1 = parseTable csvFormat contents1
                columnWidths = maxTableColumnWidths table1
                table2 = parseTable csvFormat contents2
                prettyTableText = formatTableWithWidths "|" columnWidths table2
            
            putStr prettyTableText
            hClose handle1
            hClose handle2
            when useStdio (removeFile file)
        
        -- we were expecting a single file name arg
        _ -> printSingleFileUsage