| Safe Haskell | None |
|---|
Data.CSV.Conduit
- class CSV s r where
- rowToStr :: CSVSettings -> r -> s
- intoCSV :: MonadResource m => CSVSettings -> Conduit s m r
- fromCSV :: MonadResource m => CSVSettings -> Conduit r m s
- data CSVSettings = CSVS {
- csvSep :: !Char
- csvQuoteChar :: !(Maybe Char)
- csvOutputQuoteChar :: !(Maybe Char)
- csvOutputColSep :: !Char
- defCSVSettings :: CSVSettings
- type MapRow a = Map a a
- type Row a = [a]
- readCSVFile :: (MonadResource m, CSV ByteString a) => CSVSettings -> FilePath -> m [a]
- transformCSV :: (MonadResource m, CSV s a, CSV s' b) => CSVSettings -> Source m s -> Conduit a m b -> Sink s' m () -> m ()
- mapCSVFile :: (MonadResource m, CSV ByteString a, CSV ByteString b) => CSVSettings -> (a -> [b]) -> FilePath -> FilePath -> m ()
- runResourceT :: MonadBaseControl IO m => ResourceT m a -> m a
Fundamental Types
Represents types r that are CSV-like and can be converted
to/from an underlying stream of type s.
Example #1: Basics Using Convenience API
import Data.Conduit
import Data.Conduit.Binary
import Data.Conduit.List as CL
import Data.CSV.Conduit
myProcessor :: Conduit (Row Text) m (Row Text)
myProcessor = CL.map reverse
test = runResourceT $
transformCSV defCSVSettings
(sourceFile input.csv)
myProcessor
(sinkFile output.csv)
Example #2: Basics Using Conduit API
import Data.Conduit import Data.Conduit.Binary import Data.CSV.Conduit myProcessor :: Conduit (Row Text) m (Row Text) myProcessor = undefined test = runResourceT $ sourceFile test/BigFile.csv $= intoCSV defCSVSettings $= myProcessor $= fromCSV defCSVSettings $$ sinkFile test/BigFileOut.csv
Methods
rowToStr :: CSVSettings -> r -> sSource
Convert a CSV row into strict ByteString equivalent.
intoCSV :: MonadResource m => CSVSettings -> Conduit s m rSource
Turn a stream of s into a stream of CSV row type. An example
would be parsing a ByteString stream as rows of MapRow Text.
fromCSV :: MonadResource m => CSVSettings -> Conduit r m sSource
Turn a stream of CSV row type back into a stream of s. An
example would be rendering a stream of Row ByteString rows as
Text.
Instances
| (CSV s (Row s'), Ord s', IsString s) => CSV s (MapRow s') | Generic |
| CSV ByteString (Row ByteString) |
|
| CSV ByteString (Row Text) |
|
| CSV Text (Row Text) |
data CSVSettings Source
Settings for a CSV file. This library is intended to be flexible and offer a way to process the majority of text data files out there.
Constructors
| CSVS | |
Fields
| |
Instances
defCSVSettings :: CSVSettingsSource
Default settings for a CSV file.
csvSep = ',' csvQuoteChar = Just '"' csvOutputQuoteChar = Just '"' csvOutputColSep = ','
Convenience Functions
Arguments
| :: (MonadResource m, CSV ByteString a) | |
| => CSVSettings | |
| -> FilePath | Input file |
| -> m [a] |
Read the entire contents of a CSV file into memory.
An easy way to run this function would be runResourceT after
feeding it all the arguments.
Arguments
| :: (MonadResource m, CSV s a, CSV s' b) | |
| => CSVSettings | Settings to be used for input and output |
| -> Source m s | A raw stream data source. Ex: 'sourceFile inFile' |
| -> Conduit a m b | A transforming conduit |
| -> Sink s' m () | A raw stream data sink. Ex: 'sinkFile outFile' |
| -> m () |
General purpose CSV transformer. Apply a list-like processing
function from List to the rows of a CSV stream. You
need to provide a stream data source, a transformer and a stream
data sink.
An easy way to run this function would be runResourceT after
feeding it all the arguments.
Example - map a function over the rows of a CSV file:
transformCSV set (sourceFile inFile) (C.map f) (sinkFile outFile)
Arguments
| :: (MonadResource m, CSV ByteString a, CSV ByteString b) | |
| => CSVSettings | Settings to use both for input and output |
| -> (a -> [b]) | A mapping function |
| -> FilePath | Input file |
| -> FilePath | Output file |
| -> m () |
Map over the rows of a CSV file. Provided for convenience for historical reasons.
An easy way to run this function would be runResourceT after
feeding it all the arguments.
Re-exported For Convenience
runResourceT :: MonadBaseControl IO m => ResourceT m a -> m a