Popularity
1.0
Declining
Activity
0.0
Stable
0
2
0

Monthly Downloads: 11
Programming language: Haskell
License: LicenseRef-OtherLicense
Tags: Text    
Latest version: v1.1.0

comma alternatives and similar packages

Based on the "Text" category.
Alternatively, view comma alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of comma or a related project?

Add another 'Text' Package

README

Text.Comma

Build Status

The comma package implements parsing and producing of the CSV format.

Build & install

There are two standard ways of obtaining the module:

  • by cloning the git repository: git clone https://github.com/lovasko/comma
  • by using the central Hackage server: cabal install comma

Dependencies

Main part, the library itself, depends on two packages:

  • attoparsec
  • text

In addition, the testing component of the project depends on the QuickCheck package.

API

The Text.Comma module exports only two functions: comma and uncomma, parsing and producing CSV respectively. The function prototypes are as follows:

-- | Parse a block of text into a CSV table.
comma :: T.Text                   -- ^ CSV text
      -> Either String [[T.Text]] -- ^ error | table
-- | Render a table of texts into a valid CSV output.
uncomma :: [[T.Text]] -- ^ table
        -> T.Text     -- ^ CSV text

Example

The following example loads any CSV file and prepends a column that contains row numbers:

{-# LANGUAGE OverloadedStrings #-}

import Text.Comma
import System.Exit
import qualified Data.Text as T
import qualified Data.Text.IO as T

-- | Prepend a number in front of each row.
number :: [[T.Text]] -> [[T.Text]]
number = zipWith (:) (map (T.pack . show) [0..])

main :: IO ()
main = T.readFile "table.csv" >>= (\file -> case comma file of
  Left  err -> T.putStrLn ("ERROR: " <> T.pack err)           >> exitFailure
  Right csv -> T.writeFile "table.csv" (uncomma $ number csv) >> exitSuccess)

Example usage:

$ cat table.csv
name,surname,language
Dennis,Ritchie,C
Larry,Wall,Perl
John,McCarthy,Lisp
$ ./number && cat table.csv
0,name,surname,language
1,Dennis,Ritchie,C
2,Larry,Wall,Perl
3,John,McCarthy,Lisp

Standards

Both producing and parsing of CSV files closely follows the RFC4180 document. The comma implementation has made the following decisions:

  • record separator is always only \n ('\r` is not recognized as a newline symbol)
  • it is not required for the last record to be trailed with a \n. This means that comma "hello\nworld" == comma "hello\nworld\n" == Right [["hello"], ["world"]]

License

The comma package is licensed under the terms of the [2-clause BSD license](LICENSE). In case you need any other license, feel free to contact the author.

Author

Daniel Lovasko [email protected]


*Note that all licence references and agreements mentioned in the comma README section above are relevant to that project's source code only.