lib: implement conditional line skips in csv (fixes #1076)
This commit is contained in:
		
							parent
							
								
									fa61fdbe1b
								
							
						
					
					
						commit
						5dac141a7e
					
				| @ -140,7 +140,7 @@ readJournalFromCsv separator mrulesfile csvfile csvdata = | ||||
|   -- parsec seems to fail if you pass it "-" here TODO: try again with megaparsec | ||||
|   let parsecfilename = if csvfile == "-" then "(stdin)" else csvfile | ||||
|   records <- (either throwerr id . | ||||
|               dbg2 "validateCsv" . validateCsv skiplines . | ||||
|               dbg2 "validateCsv" . validateCsv rules skiplines . | ||||
|               dbg2 "parseCsv") | ||||
|              `fmap` parseCsv separator parsecfilename csvdata | ||||
|   dbg1IO "first 3 csv records" $ take 3 records | ||||
| @ -216,11 +216,12 @@ printCSV records = unlined (printRecord `map` records) | ||||
|           unlined = concat . intersperse "\n" | ||||
| 
 | ||||
| -- | Return the cleaned up and validated CSV data (can be empty), or an error. | ||||
| validateCsv :: Int -> Either String CSV -> Either String [CsvRecord] | ||||
| validateCsv _           (Left err) = Left err | ||||
| validateCsv numhdrlines (Right rs) = validate $ drop numhdrlines $ filternulls rs | ||||
| validateCsv :: CsvRules -> Int -> Either String CSV -> Either String [CsvRecord] | ||||
| validateCsv _ _           (Left err) = Left err | ||||
| validateCsv rules numhdrlines (Right rs) = validate $ filter (not.shouldSkip) $ drop numhdrlines $ filternulls rs | ||||
|   where | ||||
|     filternulls = filter (/=[""]) | ||||
|     shouldSkip r = isJust $ getEffectiveAssignment rules r "skip" | ||||
|     validate [] = Right [] | ||||
|     validate rs@(_first:_) | ||||
|       | isJust lessthan2 = let r = fromJust lessthan2 in | ||||
| @ -587,6 +588,7 @@ journalfieldnames = | ||||
|   ,"date" | ||||
|   ,"description" | ||||
|   ,"status" | ||||
|   ,"skip" -- skip is not really a field, but we list it here to allow conditional rules that skip records | ||||
|   ] | ||||
| 
 | ||||
| assignmentseparatorp :: CsvRulesParser () | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user