如何将 .csv 文件转换为 Common-Lisp 中的列表列表

how to covert a .csv file into a list of lists in Common-Lisp

我是 common-lisp 的新手,想知道如何将 .csv 文件转换为二维列表。 我看到我们可以使用以下方法读取 .csv 文件:

(cl-csv:read-csv #P"filename.csv")

您可以通过以下方式转换为二维数组:

(defun read-2d-array (rows &rest args)
  (let* ((first-line (apply #'read-line args))
         (cols (1+ (count #\space first-line)))
         (arr (make-array (list rows cols)
                          :element-type 'integer
                          :initial-element 0)))
    (loop for i below rows
          for line = first-line then (apply #'read-line args)
          for start = 0
          do (dotimes (j cols)
               (multiple-value-bind (number end)
                   (parse-integer line :start start
                                       :junk-allowed t)
                 (setf start end
                       (aref arr i j) number))))
    arr))

但是在上面的输出之后我的输出看起来像这样:

#(#\c #\o #\l #\u #\m #\n #_ #\n #\a #\m #\e #, #\w # \i #\d #\t #\h #, #\l #\e #\n #\g #\t #\h #, #\v #\e #\r #\t #\i #\c #\a #\l #_ #\r #/ #\ F #, #\s #\t #\i #\r #\r #\u #\p #\Return #\Newline #\c #\1 #, #\9 #, #\1 #\2 #, #" #\4 #- #\1 #\2 #\d #\i #\a #, #\4 #- #\1 #\0 #\d #\i #\a #" #, #\8 #- #\1 #\5 #\0 #\c #/ #\c #\Return #\Newline

但我希望它看起来像: ((column_name width length vertical_r/f stirrup) (c1 9 12 4-12dia 8-150c/c))

有人可以帮我解决这个问题吗? 提前谢谢你。

给定一个文件,/tmp/x.csv包含

column_name,width,length,vertical_r/f,stirrup
c1,9,12,4-12dia,8-150c/c

然后使用 cl-csv:

> (read-csv #p"/tmp/x.csv")
(("column_name" "width" "length" "vertical_r/f" "stirrup")
 ("c1" "9" "12" "4-12dia" "8-150c/c"))