csv: fix inferring separator from .ssv/.tsv file extensions

This was documented but untested and may have never worked.
This commit is contained in:
Simon Michael 2020-08-21 08:59:55 -07:00
parent fbf47b85dd
commit a3c749f9e7

View File

@ -725,10 +725,18 @@ readJournalFromCsv mrulesfile csvfile csvdata =
Just s -> readDef (throwerr $ "could not parse skip value: " ++ show s) s Just s -> readDef (throwerr $ "could not parse skip value: " ++ show s) s
-- parse csv -- parse csv
let
-- parsec seems to fail if you pass it "-" here TODO: try again with megaparsec -- parsec seems to fail if you pass it "-" here TODO: try again with megaparsec
let parsecfilename = if csvfile == "-" then "(stdin)" else csvfile parsecfilename = if csvfile == "-" then "(stdin)" else csvfile
let separator = fromMaybe ',' (getDirective "separator" rules >>= parseSeparator) separator =
dbg6IO "separator" separator case getDirective "separator" rules >>= parseSeparator of
Just c -> c
_ | ext == "ssv" -> ';'
_ | ext == "tsv" -> '\t'
_ -> ','
where
ext = map toLower $ drop 1 $ takeExtension csvfile
dbg6IO "using separator" separator
records <- (either throwerr id . records <- (either throwerr id .
dbg7 "validateCsv" . validateCsv rules skiplines . dbg7 "validateCsv" . validateCsv rules skiplines .
dbg7 "parseCsv") dbg7 "parseCsv")