- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
以下是考试作业/备考的一部分:我正在尝试编写一些 clisp 代码来从文本文件中读取行。应包括空行。以下是我想出的代码:
(defun read-file (filename)
(do* ((streamin (open filename)) ;open the file
content
(line (read-line streamin nil 'eof) ;read from file in loop
(read-line streamin nil 'eof)))
((equal line 'eof) (close streamin) ;close the stream if eof is reached
(reverse content))
(setq content (cons line content)))) ;add a read line to the returned symbol
在 sublime 文本编辑器(或记事本)中创建的文本文件的预期输出如下所示:
this is
a
test
file
这是:
("this is" "" "a" "" "test" "file")
但是,我收到以下信息:
("this is^M" "^M" "a^M" "^M" "test^M" "file^M")
“^M”从何而来?它们是用记事本插入的吗?或者他们在那里是因为我的代码?它们到底是什么?我猜它们表示换行。
如果它们是由 sublime 插入的,我有什么替代方法来创建预期的输出?记事本也是如此。练习的下一步是使用过滤函数从输出中删除空行,我想这可以通过比较等于空行的行来实现。但是,当插入这些 ^M 时这是不可能的,因为例如
(equal "^M" (read-line test_file_with_empty_lines))
返回零。而
(equal "^M" "^M")
显然返回 T...
最佳答案
您正在使用期望 Unix 行结束约定的系统读取具有 DOS 行结束约定的文件。
DOS 以回车/换行对结束行。回车的ASCII码为#x0d/13,即控件M,换行符为#x0a/10,即控件J。
这些字符的 CL 名称(我应该在上面使用)分别是 #\Return
和 #\Newline
。
因此,具有 DOS 行结束约定的文件将包含诸如(十六进制)0d0a
之类的序列来标记行结束。一些期望 Unix 行结束约定(只是一个 0a
)的东西会把它读成最后一个字符是 #\Return
的行。
处理此问题的方法是以下三件事之一:
open
的实现文档,以了解如何教它使用适当的读取 DOS 约定文件的外部格式。看来您正在使用 CLISP。如果是这样,并且如果我正确阅读了它的手册,您可能想使用类似 (open ... :external-format ':dos)
的东西。
作为附加说明,虽然您的代码有效,但它不是很惯用的 CL,而且也不安全(如果读取文件时出错会怎样?):您可能希望查看规范的第 21.2 节。 (我故意不给你答案,因为你老实说,这是作业,谢谢!)。
关于lisp - 使用 read-line 从 .txt 中读取,正在读取其他符号。记事本神器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57053601/
我是编程新手,我开始创建一个简单的记事本,只有 4 个按钮(打开、保存、新建和字体)。 如果我打开或保存我收到一个错误:这是我的代码: //Declare save as a new
我用vba编写了一个宏,它用记事本打开一个文本文件,选择所有txt并将其复制到Excel。我每天必须以这种方式处理大约 100 个文件,并且我想保留我观察到的闪烁图像。代码可以工作,但问题是命令 Ap
所以我一直在寻找将我创建的 JSON 数据库连接到 Java 程序的方法,我似乎找不到适合这种特定情况的任何内容,因此我尝试使用 JDBC 教程(http://www.tutorialspoint.c
我想在记事本中显示一个消息框,所以我找到了一个简单的dll 注入(inject)示例。注入(inject)器本身不是我的并且似乎工作正常(获取进程的 id ,创建一个远程线程,获取 dll 文件的绝对
Dim ProcessProperties As New ProcessStartInfo() ProcessProperties.FileName = "notepad.exe" ProcessPr
我使用 Process.Start() 从我的程序中打开一个记事本,但新打开的记事本覆盖了屏幕。但我确实希望我的应用程序保持其焦点。 我类似地(使用相同的 Process.Start)打开 MS Ex
之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到。所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不
在 android Notes 演示中,它接受 URI: sUriMatcher.addURI(NotePad.AUTHORITY, "notes", NOTES); sUriMatc
我想知道,如何将 Redhat 中的 vi 编辑器中的整行文本复制到 Windows 中的记事本中。 如果要复制的文本尺寸很小,可以通过鼠标选择行并复制到记事本来轻松完成。但是我遇到过复制数千行的情况
主要目的是了解是否有办法从 UMDF(用户模式驱动程序框架)事件启动或执行任何用户模式应用程序。事件无关紧要。任何事件都可能起作用,例如DriverEntry、DeviceAttach 我正在研究一种
我有制表符分隔的值,需要使用 Java 将其导出为文本文件,以便在 Microsoft Excel 中打开。当制表符分隔值包含中文字符时就会出现问题。 我尝试使用 UTF-8 导出文本文件,但 Exc
我们如何管理使用 Win32 api 运行的应用程序的 wndproc 函数?我使用的软件语言是 Go。 我尝试了不止一种方法,但无法做到。你能帮我吗? I am learning the HANDL
我在源代码管理中打开历史记录,然后打开一个变更集,然后在文件列表中选择一个文件并双击打开它。 TFS 通过记事本打开文件,我想通过 Visual Studio 或任何其他文本编辑器(以突出显示语法)打
Win32的FindWindow()可以找到标题为“Untitled - Notepad”的窗口,但是如果我只想找到一个记事本窗口但不知道是不是“try. bat - 记事本”或标题栏上的其他文件名?
我是一名优秀的程序员,十分优秀!