将lisp字符串转换为流

时间:2009-10-03 17:25:19

标签: string lisp stream

我有一个看起来像这样的文件:

A B C D E
0 8 6 12 5
8 0 10 8 9
6 10 0 7 11
12 8 7 0 6
5 9 11 6 0

我不知道会有多少行和列。我想阅读顶行,它会让我知道预期的行数。我找到了lisp的(read <stream>)函数,它在一个循环中可以将每个字符解析为符号。但是,我没有找到办法将循环限制为只读取第一行并停在那里。我试图做的工作的解决方案就像是

(with-open-file (stream "/home/doppler/tmp/testcase1.txt")
  (setf line (read-line stream))
  (when line
    (loop for symbol = (read line nil)
         while symbol do (print symbol))))

这个问题是(read-line stream)返回一个字符串,(read line nil)无法解析该字符串以提取符号(s表达式)。

如何将字符串行转换为流,或者,如果可能,直接从字符串中提取符号?

1 个答案:

答案 0 :(得分:6)

您可以使用with-input-from-string宏将字符串用作流,也可以在循环中使用read-from-string。您可能也对read-delimited-list函数感兴趣,但在使用它之前必须在字符串的末尾添加某种分隔符。