|
7 | 7 | ;;> requiring a grammar to specify all of the different options. |
8 | 8 |
|
9 | 9 | (define-record-type Csv-Grammar |
10 | | - (make-csv-grammar separator-chars quote-char quote-doubling-escapes? escape-char record-separator comment-chars quote-non-numeric?) |
| 10 | + (make-csv-grammar separator-chars quote-char quote-doubling-escapes? escape-char record-separator comment-chars quote-non-numeric? parse-numeric?) |
11 | 11 | csv-grammar? |
12 | 12 | (separator-chars csv-grammar-separator-chars csv-grammar-separator-chars-set!) |
13 | 13 | (quote-char csv-grammar-quote-char csv-grammar-quote-char-set!) |
14 | 14 | (quote-doubling-escapes? csv-grammar-quote-doubling-escapes? csv-grammar-quote-doubling-escapes?-set!) |
15 | 15 | (escape-char csv-grammar-escape-char csv-grammar-escape-char-set!) |
16 | 16 | (record-separator csv-grammar-record-separator csv-grammar-record-separator-set!) |
17 | 17 | (comment-chars csv-grammar-comment-chars csv-grammar-comment-chars-set!) |
18 | | - (quote-non-numeric? csv-grammar-quote-non-numeric? csv-grammar-quote-non-numeric?-set!)) |
| 18 | + (quote-non-numeric? csv-grammar-quote-non-numeric? csv-grammar-quote-non-numeric?-set!) |
| 19 | + (parse-numeric? csv-grammar-parse-numeric? csv-grammar-parse-numeric?-set!)) |
19 | 20 |
|
20 | 21 | ;; TODO: Other options to consider: |
21 | 22 | ;; - strip-leading/trailing-whitespace? |
|
41 | 42 | ;;> (quote-char . #f))) |
42 | 43 | ;;> } |
43 | 44 | (define (csv-grammar spec) |
44 | | - (let ((grammar (make-csv-grammar '(#\,) #\" #t #f 'lax '() #f))) |
| 45 | + (let ((grammar (make-csv-grammar '(#\,) #\" #t #f 'lax '() #f #f))) |
45 | 46 | (for-each |
46 | 47 | (lambda (x) |
47 | 48 | (case (car x) |
|
68 | 69 | (csv-grammar-comment-chars-set! grammar (cdr x))) |
69 | 70 | ((quote-non-numeric?) |
70 | 71 | (csv-grammar-quote-non-numeric?-set! grammar (cdr x))) |
| 72 | + ((parse-numeric?) |
| 73 | + (csv-grammar-parse-numeric?-set! grammar (cdr x))) |
71 | 74 | (else |
72 | 75 | (error "unknown csv-grammar spec" x)))) |
73 | 76 | spec) |
|
130 | 133 | ((and (csv-grammar-quote-non-numeric? grammar) (not quoted?)) |
131 | 134 | (or (string->number field) |
132 | 135 | (error "unquoted field is not numeric" field))) |
| 136 | + ((and (csv-grammar-parse-numeric? grammar) (not quoted?)) |
| 137 | + (or (string->number field) field)) |
133 | 138 | (else field)))) |
134 | 139 | (define (finish-row) |
135 | 140 | (let ((field (get-field))) |
|
0 commit comments