From a3c749f9e72386b5b63c7bf9e8e13b9bc6a23525 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 21 Aug 2020 08:59:55 -0700 Subject: [PATCH] csv: fix inferring separator from .ssv/.tsv file extensions This was documented but untested and may have never worked. --- hledger-lib/Hledger/Read/CsvReader.hs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index 4b662cdbe..c603e1213 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -725,10 +725,18 @@ readJournalFromCsv mrulesfile csvfile csvdata = Just s -> readDef (throwerr $ "could not parse skip value: " ++ show s) s -- parse csv - -- parsec seems to fail if you pass it "-" here TODO: try again with megaparsec - let parsecfilename = if csvfile == "-" then "(stdin)" else csvfile - let separator = fromMaybe ',' (getDirective "separator" rules >>= parseSeparator) - dbg6IO "separator" separator + let + -- parsec seems to fail if you pass it "-" here TODO: try again with megaparsec + parsecfilename = if csvfile == "-" then "(stdin)" else csvfile + 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 . dbg7 "validateCsv" . validateCsv rules skiplines . dbg7 "parseCsv")