Skip to content

Instantly share code, notes, and snippets.

@fujimura
Created November 15, 2013 12:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fujimura/7483315 to your computer and use it in GitHub Desktop.
Save fujimura/7483315 to your computer and use it in GitHub Desktop.
Sort CSV
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Control.Monad.ST
import qualified Data.ByteString.Lazy as BL
import Data.Csv
import Data.List (intercalate)
import qualified Data.Vector as V
import qualified Data.Vector.Algorithms.Intro as VA
import System.Environment (getArgs)
main :: IO ()
main = do
(fileName:_) <- getArgs
csvData <- BL.readFile fileName
case decode False csvData of
Left err -> putStrLn err
Right v -> go v
where
go :: V.Vector (String,String,String,String) -> IO ()
go v = V.forM_ (sort v) $ \ (a,b,c,d) -> putStrLn $ intercalate "," [a,b,c,d]
sort v = runST $ do
mv <- V.thaw v
VA.sortBy compare mv
V.freeze mv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment