summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2018-10-24 13:09:05 +0200
committerHugo Hörnquist <hugo@hornquist.se>2018-10-24 13:09:05 +0200
commite8c8c16b0e17199ad9c80a372497035610b666eb (patch)
tree896da01576ac099ea19955fceee0fff9420a7ebd
parentRewrote tree handling. (diff)
downloadlyslib-e8c8c16b0e17199ad9c80a372497035610b666eb.tar.gz
lyslib-e8c8c16b0e17199ad9c80a372497035610b666eb.tar.xz
Add call-with-csv, and a main.
-rwxr-xr-xparse.scm29
1 files changed, 21 insertions, 8 deletions
diff --git a/parse.scm b/parse.scm
index 40d4814..5451fc9 100755
--- a/parse.scm
+++ b/parse.scm
@@ -78,15 +78,28 @@ otherwise return the full list"
fields))))
(values record-type make-record predicate accessors))))
-;;; filename -> [book]
-(define (load-data csv-file-name)
+(define (strip-extension filename)
+ "TODO remove the extension from a filename"
+ filename)
+
+(define (call-with-csv csv-file-name proc)
(let* ((csv (call-with-input-file csv-file-name read-csv))
(tree (clean-peg-tree csv))
(fields (car tree))
(data (cdr tree)))
- (receive (book make-book book? book-getters)
- (create-csv-record "book" fields)
- (map (cut apply make-book <>)
- data))))
-
-
+ (receive (record-type constructor predicate getters)
+ (create-csv-record (strip-extension
+ (basename csv-file-name))
+ fields)
+ (proc record-type constructor predicate getters
+ (map (cut apply make-book <>)
+ data)))))
+
+
+(define (main args)
+ (call-with-csv "boklista.csv"
+ (lambda (book make-book book? accessors data)
+ (let ((get-name (assoc-ref accessors 'name)))
+ (for-each (lambda (book)
+ (format #t "~s~%" (get-name book)))
+ data)))))