0b3e65bdbab9

Clean up
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Tue, 25 Dec 2018 23:13:27 -0500
parents 8892239d4834
children 18f9292a0c6c
branches/tags (none)
files src/main.lisp test/bench.lisp

Changes

--- a/src/main.lisp	Tue Dec 25 22:55:18 2018 -0500
+++ b/src/main.lisp	Tue Dec 25 23:13:27 2018 -0500
@@ -39,22 +39,22 @@
         :do (write-char char result)))
 
 (defun read-field (stream delimiter result)
-  "Read and return a single field from `stream` into `result`."
-  (let* ((field (case (peek-char nil stream nil :eof)
-                  (#\" (read-quoted-field stream delimiter result) t)
-                  (#\newline (read-char stream) nil)
-                  (:eof nil)
-                  (t (read-unquoted-field stream delimiter result) t)))
-         (done (cond
-                 ((null field) t) ; empty field at the end
-                 ((read-char-if delimiter stream nil) nil) ; normal field
-                 ((read-char-if #\newline stream nil #\newline) t) ; last field
-                 (t (error "Bad data after field ~S: ~S"
-                           field (peek-char nil stream))))))
-    (values (if field
-              (get-output-stream-string result)
-              "")
-            done)))
+  "Read and return a single field from `stream` using `result`.
+
+  Returns two values: a string of the field and a boolean denoting whether
+  we're done reading this row.
+
+  "
+  (case (peek-char nil stream nil :eof)
+    (#\" (read-quoted-field stream delimiter result))
+    ((#\newline :eof) nil)
+    (t (read-unquoted-field stream delimiter result)))
+  (let ((next (peek-char nil stream nil :eof)))
+    (values (get-output-stream-string result)
+            (cond ((eql next :eof) t)
+                  ((eql next #\newline) (read-char stream) t)
+                  ((eql next delimiter) (read-char stream) nil)
+                  (t (error "Bad data after field: ~S" next))))))
 
 (defun read-row% (stream delimiter eof-error-p eof-value)
   (if (eql :eof (peek-char nil stream eof-error-p :eof))
--- a/test/bench.lisp	Tue Dec 25 22:55:18 2018 -0500
+++ b/test/bench.lisp	Tue Dec 25 23:13:27 2018 -0500
@@ -81,9 +81,9 @@
   #+sbcl (sb-ext:gc :full t)
   (write-file-this)
 
-  (write-line "Benchmarking cl-csv (writing).")
-  #+sbcl (sb-ext:gc :full t)
-  (write-file-cl-csv)
+  ;; (write-line "Benchmarking cl-csv (writing).")
+  ;; #+sbcl (sb-ext:gc :full t)
+  ;; (write-file-cl-csv)
 
   (write-line "Benchmarking fare-csv (writing).")
   #+sbcl (sb-ext:gc :full t)
@@ -149,9 +149,9 @@
   #+sbcl (sb-ext:gc :full t)
   (format t "Read ~D rows.~2%" (read-file-this))
 
-  (write-line "Benchmarking cl-csv (reading).")
-  #+sbcl (sb-ext:gc :full t)
-  (format t "Read ~D rows.~2%" (read-file-cl-csv))
+  ;; (write-line "Benchmarking cl-csv (reading).")
+  ;; #+sbcl (sb-ext:gc :full t)
+  ;; (format t "Read ~D rows.~2%" (read-file-cl-csv))
 
   (write-line "Benchmarking fare-csv (reading).")
   #+sbcl (sb-ext:gc :full t)