Parse integers if possible
parent
938e3c7d90
commit
df5ad1919c
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue