LISP - 文件I/O

LISP - 文件I/O 首页 / LISP入门教程 / LISP - 文件I/O

在本章中,我们将了解LISP如何创建,打开,关闭文本或二进制文件进行数据存储。

打开文件

您可以使用open函数来创建新文件或打开现有文件,with-open-file 通常更方便,更常用,这将在本节的后面看到。

打开文件后,将在LISP环境中构造一个流对象来表示它。

open 函数的语法是-

open filename &key :direction :element-type :if-exists :if-does-not-exist :external-format
  • filename            -   参数是要打开或创建的文件的名称。

  • &key                   -  参数指定流的类型和错误处理方式。

  • :direction          -  关键字指定流是否应处理输入,输出或同时处理输入和输出,它采用以下值-

    • :input        -  用于输入流(默认值)

    • :output     -  用于输出流

    • :io              -  双向流

    • :probe       -  用于仅检查文件的存在;流先打开然后关闭。

  • :element-type  - 指定流的事务单位的类型。

  • :if-exists            -  参数指定如果:direction为:output或:io且指定名称的文件已存在,则采取的操作。如果方向是:input或:probe,则忽略此参数。值如下-

    • :error                                - 表示错误。

    • :new-version                   - 它创建一个具有相同名称但版本号较大的新文件。

    • :rename                           -  重命名现有文件。

    • :rename-and-delete      -  重命名现有文件,然后将其删除。

    • :append                           -  追加到现有文件中。

    • :supersede                      -  它取代了现有文件。

    • nil                                     -  它不会创建文件,甚至流也只会返回nil来指示失败。

  • :if-does-not-exist -  参数指定在指定名称的文件不存在时要采取的措施。它采用以下值-

    • :error           -  表示错误。

    • :create          -  创建具有指定名称的空文件,然后使用它。

    • nil                 -  它不会创建文件,甚至不会创建流​​,而只是返回nil来指示失败。

  • :external-format -  参数指定一种实现认可的表示文件中字符的方案。

如,您可以打开存储在/tmp文件夹中的名为myfile.txt的文件,格式为-

(open "/tmp/myfile.txt")

写入和读取

with-open-file 允许使用与读/写文件。执行完后自动关闭文件。

它具有以下语法-

with-open-file (stream filename {options}*)
   {declaration}* {form}*
  • filename 是要打开的文件的名称;它可以是字符串,路径名或流。

  • options与函数open的关键字参数相同。

写入和读取 - 示例1

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(with-open-file (stream "/tmp/myfile.txt" :direction :output)
   (format stream "Welcome to Learnfk Point!")
   (terpri stream)
   (format stream "This is a Learnfk database")
   (terpri stream)
   (format stream "Submit your Learnfk, White Papers and Articles into our Learnfk   Directory.")
)

请注意,上一章中讨论的所有输入输出函数(如terpri和format)都可用于写入我们在此处创建的文件中。

我们可以使用 read-line 函数从此文件中读取内容。

写入和读取 - 示例2

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(let ((in (open "/tmp/myfile.txt" :if-does-not-exist nil)))
   (when in
      (loop for line=(read-line in nil)
      
      while line do (format t "~a~%" line))
      (close in)
   )
)

当您执行代码时,它返回以下输出-

Welcome to Learnfk Point!
This is a Learnfk database
Submit your Learnfk, White Papers and Articles into our Learnfk Directory.

关闭文件

close 函数关闭流。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

技术领导力实战笔记 -〔TGO鲲鹏会〕

机器学习40讲 -〔王天一〕

许式伟的架构课 -〔许式伟〕

安全攻防技能30讲 -〔何为舟〕

分布式协议与算法实战 -〔韩健〕

陶辉的网络协议集训班02期 -〔陶辉〕

说透数字化转型 -〔付晓岩〕

郭东白的架构课 -〔郭东白〕

遗留系统现代化实战 -〔姚琪琳〕

好记忆不如烂笔头。留下您的足迹吧 :)