Parse integers if possible

master
y5nw 2021-08-13 18:08:47 +02:00
parent 938e3c7d90
commit df5ad1919c
1 changed files with 6 additions and 3 deletions

View File

@ -15,13 +15,14 @@
(cl-ppcre:regex-replace-all "&[:nr&]" ,seq #',replacef :simple-calls t))))
(defmacro string-to-value (seq table-allow)
(let ((str (gensym)) (datatype (gensym)) (restdata (gensym)))
(let ((str (gensym)) (datatype (gensym)) (restdata (gensym)) (n (gensym)))
`(let* ((,str ,seq)
(,datatype (char ,str 0))
(,restdata (subseq ,str 1)))
(ecase ,datatype
(#\T (if ,table-allow 'table (error "table not allowed")))
(#\N (parse-float ,restdata))
(#\N (let ((,n (parse-float ,restdata :type 'real)))
(if (typep ,n 'ratio) (coerce ,n 'float) ,n)))
(#\B (ecase (parse-integer ,restdata)
(0 t)
(1 nil)))
@ -46,7 +47,9 @@
(read-table stream restype)
vt)))
(case restype
(:alist (push (cons kv vv) ht))
(:alist (let ((c (assoc kv ht :test #'equal)))
(if c (setf (cdr c) vv)
(push (cons kv vv) ht))))
(otherwise (setf (gethash kv ht) vv))))))))
(defun from-stream (stream restype)