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.
This commit is contained in:
		
							parent
							
								
									d2b3185062
								
							
						
					
					
						commit
						0a3af8d9ee
					
				| @ -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 | ||||
|  | ||||
| @ -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`*\ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user