diff --git a/csv-simple.scm b/csv-simple.scm index 886bb81..60a3331 100644 --- a/csv-simple.scm +++ b/csv-simple.scm @@ -80,11 +80,10 @@ (cons (string-append (car res) token) (cdr res)) 2)))))))) ; Continue inside quoted data - ;; Loads given CSV file and parses its lines into lists - (define (csv-parse fn . args) + ;; Parses given CSV lines list + (define (csv-parse-lines lines . args) (let* ((separator (get-keyword #:separator args (lambda () ";"))) (string-delimiter (get-keyword #:string-delimiter args (lambda () "\""))) - (lines (read-lines (open-input-file fn))) (csv-parse-line (make-csv-line-parser separator string-delimiter)) (total (max (sub1 (length lines)) 1))) (let loop ((lines lines) @@ -98,6 +97,11 @@ (add1 idx) (cons (csv-parse-line line) res))))))) + + ;; Loads given CSV file and parses its lines into lists + (define (csv-parse fn . args) + (let ((lines (read-lines (open-input-file fn)))) + (apply csv-parse-lines lines args))) ;; Splits CSV into header and body based on the first empty row. (define (csv-split-header csv) @@ -128,6 +132,9 @@ (test-equal? csv-split-header (csv-split-header '((1 2) (5 6) (3 4))) '(((1 2) (5 6) (3 4)) ())) + (test-equal? csv-parse-lines + (csv-parse-lines '("a;b;c" "1;2")) + '(("a" "b" "c") ("1" "2"))) )) ) diff --git a/progress.scm b/progress.scm index c598cbc..35d4ed7 100644 --- a/progress.scm +++ b/progress.scm @@ -122,7 +122,7 @@ (* value (*progress%-width*))))) (swidth (- (*progress%-width*) bwidth))) (display - (sprintf "\r[~A~A]~A% ~A" + (sprintf "\r[~A~A] ~A% ~A" (make-string bwidth #\=) (make-string swidth #\space) ivalue%