From 1c8761d6d1360efab224852f5de22f69f0cd864f Mon Sep 17 00:00:00 2001 From: Charles Day Date: Sun, 8 Mar 2009 18:58:17 +0000 Subject: [PATCH] QIF Import: Allow "R" or "r" for reconciled, and "C" or "c" for cleared. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@17981 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/import-export/qif-import/file-format.txt | 2 ++ src/import-export/qif-import/qif-parse.scm | 32 +++++++++++--------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/import-export/qif-import/file-format.txt b/src/import-export/qif-import/file-format.txt index f2d2b77526..eb24656b08 100644 --- a/src/import-export/qif-import/file-format.txt +++ b/src/import-export/qif-import/file-format.txt @@ -365,7 +365,9 @@ The "C" line of specifies the cleared status. The second character in the line, if present, may be any of: * Cleared +C Cleared X Reconciled +R Reconciled ? Budgeted ! Budgeted diff --git a/src/import-export/qif-import/qif-parse.scm b/src/import-export/qif-import/qif-parse.scm index 08fa163df2..1a93c93578 100644 --- a/src/import-export/qif-import/qif-parse.scm +++ b/src/import-export/qif-import/qif-parse.scm @@ -275,25 +275,29 @@ #f)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; parse-cleared-field : in a C (cleared) field in a QIF transaction, -;; * means cleared, x or X means reconciled, and ! or ? mean some -;; budget related stuff I don't understand. +;; parse-cleared-field : In a "C" (cleared status) QIF line, +;; * or C means cleared, X or R means reconciled, and ! or ? +;; mean some budget related stuff I don't understand. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (qif-parse:parse-cleared-field read-value errorproc errortype) (if (and (string? read-value) - (> (string-length read-value) 0)) + (not (string-null? read-value))) (let ((secondchar (string-ref read-value 0))) - (cond ((eq? secondchar #\*) - 'cleared) - ((or (eq? secondchar #\x) - (eq? secondchar #\X)) - 'reconciled) - ((or (eq? secondchar #\?) - (eq? secondchar #\!)) - 'budgeted) - (else - #f))) + (case secondchar + ;; Reconciled is the most likely, especially for large imports, + ;; so check that first. Also allow for lowercase. + ((#\X #\x #\R #\r) + 'reconciled) + ((#\* #\C #\c) + 'cleared) + ((#\? #\!) + 'budgeted) + (else + (errorproc errortype + (sprintf #f (_ "Unrecognized status '%s'. Defaulting to uncleared.") + read-value)) + #f))) #f))