convert: keep original description by default, allow backreferences in replace pattern
This commit is contained in:
		
							parent
							
								
									b34015475b
								
							
						
					
					
						commit
						c2cf9b2185
					
				| @ -13,7 +13,7 @@ import Ledger.Amount (nullmixedamt) | |||||||
| import System.IO (stderr) | import System.IO (stderr) | ||||||
| import Text.CSV (parseCSVFromFile, printCSV) | import Text.CSV (parseCSVFromFile, printCSV) | ||||||
| import Text.Printf (hPrintf) | import Text.Printf (hPrintf) | ||||||
| import Text.RegexPR (matchRegexPR) | import Text.RegexPR (matchRegexPR, gsubRegexPR) | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
| import Ledger.Dates (firstJust, showDate, parsedate) | import Ledger.Dates (firstJust, showDate, parsedate) | ||||||
| import System.Locale (defaultTimeLocale) | import System.Locale (defaultTimeLocale) | ||||||
| @ -307,12 +307,11 @@ identify rules defacct desc | null matchingrules = (defacct,desc) | |||||||
|                             | otherwise = (acct,newdesc) |                             | otherwise = (acct,newdesc) | ||||||
|     where |     where | ||||||
|       matchingrules = filter ismatch rules :: [AccountRule] |       matchingrules = filter ismatch rules :: [AccountRule] | ||||||
|           where ismatch = any (isJust . flip matchregex desc . fst) . fst |           where ismatch = any (isJust . flip matchRegexPR (caseinsensitive desc) . fst) . fst | ||||||
|       (prs,acct) = head matchingrules |       (prs,acct) = head matchingrules | ||||||
|       mrs = filter (isJust . fst) $ map (\(p,r) -> (matchregex p desc, r)) prs |       p_ms_r = filter (\(_,m,_) -> isJust m) $ map (\(p,r) -> (p, matchRegexPR (caseinsensitive p) desc, r)) prs | ||||||
|       (m,repl) = head mrs |       (p,_,r) = head p_ms_r | ||||||
|       matched = fst $ fst $ fromJust m |       newdesc = case r of Just rpat -> gsubRegexPR (caseinsensitive p) rpat desc | ||||||
|       newdesc = fromMaybe matched repl |                           Nothing   -> desc | ||||||
| 
 |  | ||||||
| matchregex = matchRegexPR . ("(?i)" ++) |  | ||||||
| 
 | 
 | ||||||
|  | caseinsensitive = ("(?i)"++) | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								MANUAL
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								MANUAL
									
									
									
									
									
								
							| @ -436,10 +436,12 @@ Notes: | |||||||
|   account name to use when the transaction's description matches any of |   account name to use when the transaction's description matches any of | ||||||
|   these patterns. |   these patterns. | ||||||
| 
 | 
 | ||||||
| - A match pattern may optionally be followed by = and a replacement | - A match pattern may be followed by a replacement pattern, separated by | ||||||
|   pattern, which will become the ledger transaction's description. |   ``=``, which rewrites the matched part of the description.  Use this if | ||||||
|   Otherwise the matched part of the csv description is used. (To preserve |   you want to clean up messy bank data.  To rewrite the entire description, | ||||||
|   the full csv description, use .* before and after the match pattern.) |   use a match pattern like ``.*PAT.*=REPL``. Within a replacement pattern, | ||||||
|  |   you can refer to the matched text with ``\0`` and any regex groups | ||||||
|  |   with ``\1``, ``\2`` in the usual way. | ||||||
| 
 | 
 | ||||||
| test | test | ||||||
| '''' | '''' | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user