我正在尝试从文本文件读取 Lisp 中的数据(实际上是一个数组)。
我尝试使用with-open-file
and read-line
但无法实现我的目标。我正在寻找的东西相当于做data=load('filename.txt')
在 MATLAB 中,这样我就得到一个名为data
已将全部信息加载到filename.txt
.
文本文件的格式如下
1.0 2.0 3.0 ...
1.5 2.5 3.5 ...
2.0 3.0 4.0 ...
.....
尺寸也可能有所不同。预先非常感谢。
做到这一点的基本方法是使用with-open-file
为了获取输入流,read-line
in a loop
得到线路,split-sequence
(来自同名库)将其拆分为字段,并且parse-number
(来自同名库)将字符串转换为数字。所有提到的库都可以从快速口语.
编辑:只是为了让您开始,这是一个未经验证的简单版本:
(defun load-array-from-file (filename)
(with-open-file (in filename
:direction :input)
(let* ((data-lol (loop :for line := (read-line in nil)
:while line
:collect (mapcar #'parse-number:parse-number
(cl-ppcre:split "\\s+" line))))
(rows (length data-lol))
(columns (length (first data-lol))))
(make-array (list rows columns)
:initial-contents data-lol))))
您应该添加一些检查并考虑如果未满足您的要求,您想要得到什么:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)