gpt4 book ai didi

LISP:在从文件中读取游戏板时格式化读取行的输出

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:56 25 4
gpt4 key购买 nike

我正在尝试从文本文件中读取电路板,但在打印时也会打印换行符和引号:

(with-open-file (stream "brd1.txt")
(do ((line (read-line stream nil)
(read-line stream nil)))
((null line))
(print line)))

"+ + +^M"
" 3 3 ^M"
"+ + +^M"
" ^M"
"+ + +"
NIL

我是 LISP 的新手。有人可以帮我格式化这些行以将确切的电路板打印为:

+ + +
3 3
+ + +

+ + +

最佳答案

输入

显然,您正在尝试将带有 CRLF 分隔行的 DOS 文本文件提供给 Lisp 实现,该实现假定这些行以 Unix 方式使用 LF 分隔。请注意,read-line 去除换行符,因此在我们的例子中,LF 被去除,但 CR 被视为普通字符,因此保留在字符串中。

换行符是特定于平台的,因此在 Lisp 中依赖于实现。更重要的是,似乎 asdf 和 asdf-encodings 都没有解决这个问题。在我看来,您有以下选择:

  • 手动修剪 CR。 G。像这样:

    (string-right-trim '(\#Return) 行)

  • 使用 asdf 的函数之一 slurp-stream-stringslurp-stream-lines;
  • 使用一些特定于实现的机制来指定编码;
  • 将您的文本文件转换为 Unix 格式。

输出

如前所述,PRINT 实际上是一种人类可读的序列化。 CLHS 的 WRITE 页面上有一堆打印功能,当然还有 FORMAT。为了输出字符串,您还可以使用 WRITE-STRING(不附加换行符)或 WRITE-LINE(带换行符)。

更新

实际上 UIOP(不是 ASDF!)导出实用函数 UIOP:STRIPLN,根据其文档字符串,它执行以下操作:

"Strip a string X from any ending CR, LF or CRLF. Return two values, the stripped string and the ending that was stripped, or the original value and NIL if no stripping took place. Since our STRCAT accepts NIL as empty string designator, the two results passed to STRCAT always reconstitute the original string"

关于LISP:在从文件中读取游戏板时格式化读取行的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com