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`*\