summaryrefslogtreecommitdiff
path: root/parse.scm
diff options
context:
space:
mode:
Diffstat (limited to 'parse.scm')
-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)))))