arrays - 从 Common Lisp 中的文本文件中读取数组

标签 arrays file lisp common-lisp

我正在尝试从文本文件中读取 Lisp 中的数据(实际上是一个数组)。 我尝试使用 with-open-fileread-line 东西但无法实现我的目标。我正在寻找的是等同于在 MATLAB 中执行 data=load('filename.txt'),以便我得到一个名为 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-lineloop 中获取行,split-sequence(来自同名库)将其拆分为字段,parse-number(来自同名库)将字符串转换为数字。所有提到的库都可以从 Quicklisp 获得。 .

编辑:为了让你开始,这是一个没有验证的简单版本:

(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))))

你应该添加一些支票并考虑你想要得到什么,以防它们没有被满足:

  • 行的长度都一样吗?
  • 所有字段都是有效数字吗?

关于arrays - 从 Common Lisp 中的文本文件中读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106289/

相关文章:

PHP/MYSQL - 将表字段保存为单独的字符串变量

r - 无法将此 excel 文件导入 R

algorithm - 当我运行程序来计算整数的教会数字时,为什么会出现 #("halt") 错误?

C 字符串删除 - 此代码如何工作?

c++ - 如何检索此数组的大小?

c++ - 如何在 C++ 中初始化动态数组?

c - 读取文件并跳过空格?

C编程: Struct array construction while reading a file

Lisp:相同的数学函数在不同时间评估为不同的值?

haskell - 如何在 Haskell 中定义 Lispy 数据类型?