热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

使用读取行从.txt读取,读取其他符号。记事本的伪像?

如何解决《使用读取行从.txt读取,读取其他符号。记事本的伪像?》经验,为你挑选了1个好方法。

以下是家庭作业/考试准备的一部分:我正在尝试编写一些简明的代码来从文本文件中读取行。空行应包括在内。以下是我想出的代码:

(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 Texteditor(或记事本)中创建的文本文件的预期输出,如下所示:

this is

a

test
file

这是:

("this is" "" "a" "" "test" "file")

但是,我收到以下信息:

("this is^M" "^M" "a^M" "^M" "test^M" "file^M")

“ ^ M”来自哪里?它们是通过记事本插入的吗?还是因为我的代码而在那里?他们到底是什么?我猜他们表明一个新的线。

如果将它们插入到高处,我必须用什么替代方法来产生预期的输出?记事本也一样。练习的下一步是使用过滤器功能从输出中删除空行,我想这可以通过将等于空行的行进行比较来实现。但是,当插入这些^ M时,这是不可能的,因为例如

(equal "^M" (read-line test_file_with_empty_lines))

返回NIL。而

(equal "^M" "^M")

显然返回T ...



1> tfb..:

您正在使用DOS的行尾约定的系统读取文件,该系统需要Unix的行尾约定。

DOS以回车/换行对结束行。回车的ASCII码是#x0d / 13,它是控件M,换行是#x0a / 10,它是控件J。

这些字符的CL名称(我应该在上面使用过)分别是#\Return#\Newline

因此,具有DOS行尾约定的文件将包含序列(如(十六进制))0d0a以标记行尾。期待Unix的行尾约定(只是一个0a)的读者可能会将其读为最后一个字符为的行#\Return

解决此问题的方法是三件事之一:

假设您在Unixy机器上运行,请使用使用Unixy行尾约定的编辑器(无论如何,Sublime Text在OSX上都是如此);

如果您使用的是Windows计算机,那么Lisp可能应该默认使用平台的本地行尾约定并为您进行翻译;

如果以上一项或两项均不起作用,或者文件已在计算机之间移动,则需要阅读实现的文档,open以了解如何教它使用适当的外部格式来读取DOS约定文件。


看来您正在使用CLISP。如果是这样,并且如果我正确阅读了其手册,则可能要使用(open ... :external-format ':dos)


另外要注意的是,尽管您的代码可以工作,但它不是非常惯用的CL,也不安全(读取文件时出现错误怎么办?):您可能希望查看规范的21.2节。(我故意不给您答案,因为您很诚实并说这是家庭作业,谢谢!)。


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • C盘无法格式化的原因及解决方法
    本文探讨了C盘无法格式化的原因,并提供了详细的解决方案,帮助用户顺利进行系统维护。 ... [详细]
  • Win10 周年更新 14393.1737 的详细内容与改进
    尽管今天不是常规的周二补丁日,微软依然发布了 Win10 周年更新 14393.1737 和 Win10 创意者更新 15063.632。本文将详细介绍 Win10 周年更新 14393.1737 的主要更新内容。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • Linux基础知识:Vi与Vim编辑器详解
    Linux基础知识:Vi与Vim编辑器详解 ... [详细]
  • 如何在您的计算机上配置Python和PyCharm开发环境
    本文详细介绍了在Windows 10系统上配置Python和PyCharm开发环境的步骤。内容包括Python的安装与卸载、PyCharm的安装与卸载,以及如何在Windows 10中通过双击安装文件“python-3.7.2-amd64.exe”来完成Python的安装。此外,还提供了关于环境变量配置和基本设置的实用建议,帮助用户快速搭建高效的开发环境。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
author-avatar
我的小角落5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有