Use duck for util-csv exclusively.
This commit is contained in:
parent
2fb41c172e
commit
77f1de6e36
3 changed files with 20 additions and 28 deletions
|
@ -51,3 +51,15 @@ Curried version of fast CSV line parser with given separator and string delimite
|
||||||
* ```separator``` - separator character
|
* ```separator``` - separator character
|
||||||
* ```string-delimiger``` - string quotation character
|
* ```string-delimiger``` - string quotation character
|
||||||
* ```line``` - line to parse
|
* ```line``` - line to parse
|
||||||
|
|
||||||
|
### csv-parse-lines [procedure]
|
||||||
|
|
||||||
|
(csv-parse-lines lines separator: (separator ;) string-delimiter: (string-delimiter "))
|
||||||
|
|
||||||
|
Parses given lines and returns list of lists of strings.
|
||||||
|
|
||||||
|
### csv-parse [procedure]
|
||||||
|
|
||||||
|
(csv-parse fn . args)
|
||||||
|
|
||||||
|
Uses ```csv-parse-lines``` on lines read from given file ```fn```.
|
||||||
|
|
23
doc/utils.md
23
doc/utils.md
|
@ -8,29 +8,6 @@ well.
|
||||||
|
|
||||||
The modules are listed in alphabetical order.
|
The modules are listed in alphabetical order.
|
||||||
|
|
||||||
### CSV
|
|
||||||
|
|
||||||
(import util-csv)
|
|
||||||
|
|
||||||
This module provides a very simple, incomplete and incorrect but fast
|
|
||||||
CSV loader.
|
|
||||||
|
|
||||||
(csv-parse filename
|
|
||||||
[#:separator #\;]
|
|
||||||
[#:string-delimiter #\"])
|
|
||||||
|
|
||||||
* ```separator``` - cell separator in CSV file
|
|
||||||
* ```string-delimiter``` - for introducing strings possibly with separators
|
|
||||||
|
|
||||||
Parses given CSV file and returns list of lists of strings
|
|
||||||
representing its contents.
|
|
||||||
|
|
||||||
(csv-split-header csv)
|
|
||||||
|
|
||||||
* ```csv``` - list of lists of strings
|
|
||||||
|
|
||||||
Splits given loaded CSV into two tables at the first empty row.
|
|
||||||
|
|
||||||
### Dictionary
|
### Dictionary
|
||||||
|
|
||||||
(import util-dict-list)
|
(import util-dict-list)
|
||||||
|
|
|
@ -96,9 +96,10 @@ CSV loader.")
|
||||||
(cons (cons token (car res)) (cdr res))
|
(cons (cons token (car res)) (cdr res))
|
||||||
2)))))))) ; Continue inside quoted data
|
2)))))))) ; Continue inside quoted data
|
||||||
;; Parses given CSV lines list
|
;; Parses given CSV lines list
|
||||||
(define* (csv-parse-lines lines
|
(define*/doc (csv-parse-lines lines
|
||||||
#:separator (separator #\;)
|
#:separator (separator #\;)
|
||||||
#:string-delimiter (string-delimiter #\"))
|
#:string-delimiter (string-delimiter #\"))
|
||||||
|
("Parses given lines and returns list of lists of strings.")
|
||||||
(let* ((csv-parse-line (make-csv-line-parser separator string-delimiter))
|
(let* ((csv-parse-line (make-csv-line-parser separator string-delimiter))
|
||||||
(total (max (sub1 (length lines)) 1)))
|
(total (max (sub1 (length lines)) 1)))
|
||||||
(let loop ((lines lines)
|
(let loop ((lines lines)
|
||||||
|
@ -114,7 +115,8 @@ CSV loader.")
|
||||||
res)))))))
|
res)))))))
|
||||||
|
|
||||||
;; Loads given CSV file and parses its lines into lists
|
;; Loads given CSV file and parses its lines into lists
|
||||||
(define (csv-parse fn . args)
|
(define/doc (csv-parse fn . args)
|
||||||
|
("Uses ```csv-parse-lines``` on lines read from given file ```fn```.")
|
||||||
(call/cc
|
(call/cc
|
||||||
(lambda (ret)
|
(lambda (ret)
|
||||||
(with-exception-handler
|
(with-exception-handler
|
||||||
|
@ -125,7 +127,8 @@ CSV loader.")
|
||||||
(apply csv-parse-lines lines args)))))))
|
(apply csv-parse-lines lines args)))))))
|
||||||
|
|
||||||
;; Splits CSV into header and body based on the first empty row.
|
;; Splits CSV into header and body based on the first empty row.
|
||||||
(define (csv-split-header csv)
|
(define/doc (csv-split-header csv)
|
||||||
|
("Splits given loaded CSV into two tables at the first empty row.")
|
||||||
(let loop ((body csv)
|
(let loop ((body csv)
|
||||||
(rhead '()))
|
(rhead '()))
|
||||||
(if (null? body)
|
(if (null? body)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue