在本章中,我们将了解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 函数关闭流。
参考链接
https://www.learnfk.com/lisp/lisp-file-io.html
标签:文件,教程,stream,format,LISP,Learnfk,无涯,创建,open From: https://blog.51cto.com/u_14033984/9240398