From e9547849b87d078e476cdc10568559bf278dba7b Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 19 Jan 2017 22:50:37 +1100 Subject: Election functionality added, completely untested --- src/CSV.hs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/CSV.hs') diff --git a/src/CSV.hs b/src/CSV.hs index d25a669..05fb472 100644 --- a/src/CSV.hs +++ b/src/CSV.hs @@ -5,6 +5,7 @@ module CSV( specialChars, defaultSettings, + unParseRecord, parseRecord ) where @@ -14,6 +15,7 @@ module CSV( import Text.ParserCombinators.Parsec ( (<|>), () ) import qualified Text.ParserCombinators.Parsec as Parsec import qualified Data.Char as Char +import qualified Data.List as List @@ -40,6 +42,15 @@ specialChars s = (separator s):(quote s):(escape s):[] +unParseRecord :: Settings -> [String] -> String +unParseRecord settings record = + let escFunc c = if (c == escape settings || c == quote settings) then (escape settings):c:[] else c:[] + escapeField s = ((quote settings) : (concatMap escFunc s)) ++ ((quote settings):[]) + in List.intercalate [separator settings] (map escapeField record) + + + + parseRecord :: Settings -> String -> Either Parsec.ParseError [String] parseRecord settings input = Parsec.parse (record settings) "error" input -- cgit