From 0a3af8d9ee0d350e1360bf49b0fb711eb92c13c6 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 14 Jun 2019 16:43:12 -0700 Subject: [PATCH] csv: strip outer whitespace when interpolating CSV values (#1051) This removes a potential snag in amount field assignments, and hopefully is harmless and acceptable otherwise. --- hledger-lib/Hledger/Read/CsvReader.hs | 4 +++- hledger-lib/hledger_csv.m4.md | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index 5875f7a4e..2802f0872 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -850,10 +850,12 @@ getEffectiveAssignment rules record f = lastMay $ assignmentsFor f where csvline = intercalate "," record +-- | Render a field assigment's template, possibly interpolating referenced +-- CSV field values. Outer whitespace is removed from interpolated values. renderTemplate :: CsvRules -> CsvRecord -> FieldTemplate -> String renderTemplate rules record t = regexReplaceBy "%[A-z0-9]+" replace t where - replace ('%':pat) = maybe pat (\i -> atDef "" record (i-1)) mindex + replace ('%':pat) = maybe pat (\i -> strip $ atDef "" record (i-1)) mindex where mindex | all isDigit pat = readMay pat | otherwise = lookup (map toLower pat) $ rcsvfieldindexes rules diff --git a/hledger-lib/hledger_csv.m4.md b/hledger-lib/hledger_csv.m4.md index 224eb08de..e51be059c 100644 --- a/hledger-lib/hledger_csv.m4.md +++ b/hledger-lib/hledger_csv.m4.md @@ -161,8 +161,12 @@ amount USD %4 # combine three fields to make a comment (containing two tags) comment note: %somefield - %anotherfield, date: %1 ``` + Field assignments can be used instead of or in addition to a field list. +Note, interpolation strips any outer whitespace, so a CSV value like +`" 1 "` becomes `1` when interpolated. + ## conditional block `if` *`PATTERN`*\