Work on documenting CSV module and extending duck to support racket-kwargs.
This commit is contained in:
parent
a5afb25dd7
commit
4d81684cff
6 changed files with 53 additions and 16 deletions
|
@ -34,3 +34,20 @@ Converts given seconds to ISO date string YYYY-MM-DD. Defaults to ```(current-se
|
||||||
(today/iso)
|
(today/iso)
|
||||||
|
|
||||||
Returns today as ISO date string YYYY-MM-DD.
|
Returns today as ISO date string YYYY-MM-DD.
|
||||||
|
|
||||||
|
## util-csv [module]
|
||||||
|
|
||||||
|
(import util-csv)
|
||||||
|
|
||||||
|
This module provides a very simple, incomplete and incorrect but fast
|
||||||
|
CSV loader.
|
||||||
|
|
||||||
|
### (make-csv-line-parser separator string-delimiter) [procedure]
|
||||||
|
|
||||||
|
((make-csv-line-parser separator string-delimiter) line)
|
||||||
|
|
||||||
|
Curried version of fast CSV line parser with given separator and string delimiter.
|
||||||
|
|
||||||
|
* ```separator``` - separator character
|
||||||
|
* ```string-delimiger``` - string quotation character
|
||||||
|
* ```line``` - line to parse
|
||||||
|
|
11
src/Makefile
11
src/Makefile
|
@ -56,12 +56,13 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \
|
||||||
sgr-list.o sgr-block.o table-processor.o table-border.o \
|
sgr-list.o sgr-block.o table-processor.o table-border.o \
|
||||||
table-style.o sgr-state.o util-utf8.o sgr-cell.o \
|
table-style.o sgr-state.o util-utf8.o sgr-cell.o \
|
||||||
template-list-expander.o box-drawing.o util-list.o \
|
template-list-expander.o box-drawing.o util-list.o \
|
||||||
export-web-static.o util-dir.o racket-kwargs.o dokuwiki.o
|
export-web-static.o util-dir.o dokuwiki.o
|
||||||
|
|
||||||
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
|
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
|
||||||
util-time.import.scm
|
util-time.import.scm util-csv.import.scm
|
||||||
|
|
||||||
GENDOC-OBJS=gendoc.o duck-extract.o util-time.o
|
GENDOC-OBJS=gendoc.o duck-extract.o util-time.o util-csv.o util-io.o \
|
||||||
|
progress.o testing.o
|
||||||
|
|
||||||
.PHONY: imports
|
.PHONY: imports
|
||||||
imports: $(HACKERBASE-DEPS)
|
imports: $(HACKERBASE-DEPS)
|
||||||
|
@ -222,8 +223,8 @@ MBASE-DIR-SOURCES=mbase-dir.scm testing.import.scm \
|
||||||
mbase-dir.o: mbase-dir.import.scm
|
mbase-dir.o: mbase-dir.import.scm
|
||||||
mbase-dir.import.scm: $(MBASE-DIR-SOURCES)
|
mbase-dir.import.scm: $(MBASE-DIR-SOURCES)
|
||||||
|
|
||||||
UTIL-CSV-SOURCES=util-csv.scm testing.import.scm \
|
UTIL-CSV-SOURCES=util-csv.scm testing.import.scm progress.import.scm \
|
||||||
progress.import.scm util-io.import.scm
|
util-io.import.scm duck.import.scm racket-kwargs.import.scm
|
||||||
|
|
||||||
util-csv.o: util-csv.import.scm
|
util-csv.o: util-csv.import.scm
|
||||||
util-csv.import.scm: $(UTIL-CSV-SOURCES)
|
util-csv.import.scm: $(UTIL-CSV-SOURCES)
|
||||||
|
|
10
src/duck.scm
10
src/duck.scm
|
@ -40,10 +40,20 @@
|
||||||
(define var val))
|
(define var val))
|
||||||
((_ (define/doc var doc val))
|
((_ (define/doc var doc val))
|
||||||
(define var val))
|
(define var val))
|
||||||
|
|
||||||
((_ (define/doc var doc arg (make-parameter val)))
|
((_ (define/doc var doc arg (make-parameter val)))
|
||||||
(define var val))
|
(define var val))
|
||||||
|
|
||||||
|
((_ (define* var val))
|
||||||
|
(define* var val))
|
||||||
|
((_ (define*/doc var doc val))
|
||||||
|
(define* var val))
|
||||||
|
|
||||||
((_ (define (proc . args) expr ...))
|
((_ (define (proc . args) expr ...))
|
||||||
(define (proc . args) expr ...))
|
(define (proc . args) expr ...))
|
||||||
|
((_ (define/doc (proc . args) doc expr ...))
|
||||||
|
(define (proc . args) expr ...))
|
||||||
|
|
||||||
((_ expr)
|
((_ expr)
|
||||||
expr)))
|
expr)))
|
||||||
|
|
||||||
|
|
|
@ -20,4 +20,5 @@
|
||||||
(gen-duck "doc/d-utils.md"
|
(gen-duck "doc/d-utils.md"
|
||||||
"Utility modules"
|
"Utility modules"
|
||||||
"These are various utility modules for other HackerBase libraries."
|
"These are various utility modules for other HackerBase libraries."
|
||||||
util-time)
|
util-time
|
||||||
|
util-csv)
|
||||||
|
|
|
@ -26,8 +26,6 @@
|
||||||
;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(declare (unit racket-kwargs))
|
|
||||||
|
|
||||||
(module
|
(module
|
||||||
racket-kwargs
|
racket-kwargs
|
||||||
(
|
(
|
||||||
|
|
|
@ -25,8 +25,12 @@
|
||||||
|
|
||||||
(declare (unit util-csv))
|
(declare (unit util-csv))
|
||||||
|
|
||||||
(module
|
(import duck)
|
||||||
|
|
||||||
|
(module*
|
||||||
util-csv
|
util-csv
|
||||||
|
#:doc ("This module provides a very simple, incomplete and incorrect but fast
|
||||||
|
CSV loader.")
|
||||||
(
|
(
|
||||||
make-csv-line-parser
|
make-csv-line-parser
|
||||||
csv-parse
|
csv-parse
|
||||||
|
@ -41,11 +45,17 @@
|
||||||
(chicken condition)
|
(chicken condition)
|
||||||
testing
|
testing
|
||||||
progress
|
progress
|
||||||
util-io)
|
util-io
|
||||||
|
racket-kwargs)
|
||||||
|
|
||||||
;; Curry version of line parser with configurable cell separator and
|
;; Curry version of line parser with configurable cell separator and
|
||||||
;; string delimiter. Returns a list of lists of strings.
|
;; string delimiter. Returns a list of lists of strings.
|
||||||
(define ((make-csv-line-parser separator string-delimiter) line)
|
(define/doc ((make-csv-line-parser separator string-delimiter) line)
|
||||||
|
("Curried version of fast CSV line parser with given separator and string delimiter.
|
||||||
|
|
||||||
|
* ```separator``` - separator character
|
||||||
|
* ```string-delimiger``` - string quotation character
|
||||||
|
* ```line``` - line to parse")
|
||||||
(let loop ((tokens (string->list line))
|
(let loop ((tokens (string->list line))
|
||||||
(res '())
|
(res '())
|
||||||
(state 1))
|
(state 1))
|
||||||
|
@ -86,10 +96,10 @@
|
||||||
(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 . args)
|
(define* (csv-parse-lines lines
|
||||||
(let* ((separator (get-keyword #:separator args (lambda () #\;)))
|
#:separator (separator #\;)
|
||||||
(string-delimiter (get-keyword #:string-delimiter args (lambda () #\")))
|
#:string-delimiter (string-delimiter #\"))
|
||||||
(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)
|
||||||
(idx 0)
|
(idx 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue