From 4cb9dfb5b8d130b1005fbd5a8fc73e068a7d527f Mon Sep 17 00:00:00 2001 From: Stephen Morgan Date: Tue, 23 Mar 2021 23:04:30 +1100 Subject: [PATCH] lib: Properly escape quotes in csv output. --- hledger-lib/Hledger/Read/CsvReader.hs | 4 ++-- hledger/test/balance/balance.test | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index d5f224bc9..b93b8506d 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -813,8 +813,8 @@ parseResultToCsv = toListList . unpackFields printCSV :: CSV -> TL.Text printCSV = TB.toLazyText . unlinesB . map printRecord - where printRecord = mconcat . map TB.fromText . intersperse "," . map printField - printField = wrap "\"" "\"" . T.replace "\"" "\\\"\\\"" + where printRecord = foldMap TB.fromText . intersperse "," . map printField + printField = wrap "\"" "\"" . T.replace "\"" "\"\"" -- | Return the cleaned up and validated CSV data (can be empty), or an error. validateCsv :: CsvRules -> Int -> Either String CSV -> Either String [CsvRecord] diff --git a/hledger/test/balance/balance.test b/hledger/test/balance/balance.test index a866cd096..7401e8034 100644 --- a/hledger/test/balance/balance.test +++ b/hledger/test/balance/balance.test @@ -143,3 +143,14 @@ hledger -f - balance -b 2016/10 -e 2016/11 >>>2 >>>= 0 +# 7. Test csv output +hledger -f - balance -N --output-format=csv +<<< +2021-01-01 Test + Assets:ABC "AB.C" 1 + Assets:Cash -$1 +>>> +"account","balance" +"Assets:ABC","""AB.C"" 1" +"Assets:Cash","$-1" +>>>= 0