From e8c8c16b0e17199ad9c80a372497035610b666eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Wed, 24 Oct 2018 13:09:05 +0200 Subject: Add call-with-csv, and a main. --- parse.scm | 29 +++++++++++++++++++++-------- 1 file 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))))) -- cgit v1.2.3