diff options
author | Joris | 2015-10-10 11:22:03 +0200 |
---|---|---|
committer | Joris | 2015-10-10 11:22:03 +0200 |
commit | 7825b27d262af7252b48e9179a5bbf86b0f30d22 (patch) | |
tree | 2d85883a427fa1183cd5f7737b58e29ba2471828 /src/BirthdateParser.hs | |
parent | dd16fd43b09a881a43433174728cf45792cce8ae (diff) | |
download | events-7825b27d262af7252b48e9179a5bbf86b0f30d22.tar.gz events-7825b27d262af7252b48e9179a5bbf86b0f30d22.tar.bz2 events-7825b27d262af7252b48e9179a5bbf86b0f30d22.zip |
More readable birthdates in csv file
Diffstat (limited to 'src/BirthdateParser.hs')
-rw-r--r-- | src/BirthdateParser.hs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/BirthdateParser.hs b/src/BirthdateParser.hs new file mode 100644 index 0000000..1e4051b --- /dev/null +++ b/src/BirthdateParser.hs @@ -0,0 +1,57 @@ +module BirthdateParser + ( parseBirthdates + ) where + +import Control.Arrow (left) + +import Data.Text (Text) +import qualified Data.Text as T + +import Text.ParserCombinators.Parsec + +import Birthdate +import Date + +parseBirthdates :: Text -> Either Text [Birthdate] +parseBirthdates input = + left + (T.pack . show) + (parse birthdatesParser "" (T.unpack input)) + +birthdatesParser :: Parser [Birthdate] +birthdatesParser = many (many newline >> birthdateParser <* many newline) + +birthdateParser :: Parser Birthdate +birthdateParser = + Birthdate <$> + dateParser <* spaces <* char ',' <*> + valueParser <* char ',' <*> + valueParser + +valueParser :: Parser Text +valueParser = T.strip . T.pack <$> many (noneOf ",\n") + +dateParser :: Parser Date +dateParser = + Date <$> + integerParser <* spaces <*> + monthParser <* spaces <*> + integerParser + +integerParser :: Parser Int +integerParser = (read :: String -> Int) <$> many1 digit + +monthParser :: Parser Int +monthParser = + (try $ string "Janvier" >> return 1) + <|> (try $ string "Février" >> return 2) + <|> (try $ string "Mars" >> return 3) + <|> (try $ string "Avril" >> return 4) + <|> (try $ string "Mai" >> return 5) + <|> (try $ string "Juin" >> return 6) + <|> (try $ string "Juillet" >> return 7) + <|> (try $ string "Août" >> return 8) + <|> (try $ string "Septembre" >> return 9) + <|> (try $ string "Octobre" >> return 10) + <|> (try $ string "Novembre" >> return 11) + <|> (try $ string "Décembre" >> return 12) |