summaryrefslogtreecommitdiffstats
path: root/stdlib/csv.tl
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/csv.tl')
-rw-r--r--stdlib/csv.tl74
1 files changed, 0 insertions, 74 deletions
diff --git a/stdlib/csv.tl b/stdlib/csv.tl
deleted file mode 100644
index f3b4f190..00000000
--- a/stdlib/csv.tl
+++ /dev/null
@@ -1,74 +0,0 @@
-;; Copyright 2025
-;; Kaz Kylheku <kaz@kylheku.com>
-;; Vancouver, Canada
-;; All rights reserved.
-;;
-;; Redistribution and use in source and binary forms, with or without
-;; modification, are permitted provided that the following conditions are met:
-;;
-;; 1. Redistributions of source code must retain the above copyright notice,
-;; this list of conditions and the following disclaimer.
-;;
-;; 2. Redistributions in binary form must reproduce the above copyright notice,
-;; this list of conditions and the following disclaimer in the documentation
-;; and/or other materials provided with the distribution.
-;;
-;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-;; POSSIBILITY OF SUCH DAMAGE.
-
-(defun get-csv (: (stream *stdin*))
- (if (stringp stream)
- (upd stream make-string-input-stream))
- (let ((record (vec))
- (field (str 0))
- (state :rfield)
- (done nil))
- (while (not done)
- (let ((ch (get-char stream)))
- (when (eq ch #\return)
- (let ((ch2 (get-char stream)))
- (if (eq ch2 #\newline)
- (set ch ch2)
- (if ch2
- (unget-char ch2 stream)))))
- (caseq state
- (:rfield (caseql* ch
- (#\newline (vec-push record field)
- (set done t))
- (#\, (vec-push record field)
- (set field (str 0)))
- (#\" (cond
- ((empty field)
- (set state :qfield))
- (t
- (string-extend field ch))))
- (nil (vec-push record field)
- (set done t))
- (t (string-extend field ch))))
- (:qfield (caseql* ch
- (#\" (set state :quot))
- (nil (vec-push record field)
- (set done t))
- (t (string-extend field ch))))
- (:quot (caseql* ch
- (#\, (vec-push record field)
- (set field (str 0)
- state :rfield))
- (#\" (string-extend field ch)
- (set state :qfield))
- (#\newline (vec-push record field)
- (set done t))
- (nil (vec-push record field)
- (set done t))
- (t (string-extend field ch)
- (set state :rfield)))))))
- record))