Lisp在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
LISP 初体验 发布于:2021-08-11 13:16 XY坐标标注CAD插件 发布于:2021-06-11 15:25 format t 输出语句 发布于:2020-08-10 18:21 print 输出语句 发布于:2020-08-10 18:20 write 输出语句 发布于:2020-08-10 18:16 write-line 输出语句 发布于:2020-08-10 18:14 循环输出内容 发布于:2020-08-10 18:11 [更多]
显示目录

文件I/O



文件I/O

我们已经了解如何使用标准的输入和输出是由Common Lisp处理的参数。所有这些函数读取和写入文本文件和二进制文件。唯一不同的是在这种情况下,我们使用流不是标准输入或输出,但对于写入或读取文件的特定目的的流创建的。

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

文件代表一个字节序列,如果它是一个文本文件或二进制文件。本章将引导完成重要的功能/宏的文件管理。

打开文件

可以使用open 函数来创建一个新文件或打开一个现有的文件。这是最基本的功能为打开一个文件。然而,with-open-file通常更方便,更常用,因为我们将在本节后面看。

当一个文件被打开,一个流对象被创建来代表它在LISP环境。流上的所有操作基本上等同于操作上的文件。

open 函数语法是:


open filename &key :direction :element-type :
if-exists :if-does-not-exist :external-format

那么,

  • filename 参数是要打开或创建的文件的名称。

  • keyword 参数指定的数据流和错误处理方式的类型。

  • :direction keyword 指定的流是否应处理的输入,输出,或两者兼而有之,它采用下列值:

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

  • :output - 输出流

  • :io - 双向流

  • :probe - 只是检查一个文件是否存在;该流被打开,然后关闭。

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

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

    • :error - 它发出错误信号。

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

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

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

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

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

    • nil - 它不创建一个文件甚至流只是返回零表示失败。

:if-does-not-exist 参数指定,如果指定名称的文件已经不存在应采取的操作。它采用下列值:

  • :error - 它发出错误信号。

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

  • nil - 它不创建一个文件或流,而是简单地返回nil表示失败。

  • :external-format 参数指定用于表示文件的字符的实施认可制度

例如,可以打开一个名为myfile.txt的存储在/ tmp文件夹的文件:


(open "/tmp/myfile.txt")

写入和读取文件

with-open-file允许读取或写入到一个文件中,用与读/写事务相关联的流变量。一旦这项工作完成后,它会自动关闭文件。它使用极为方便。

它的语法如下:


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

  • options 就像keyword 参数给函数打开的一样。

示例 1

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:


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

请注意,在前面的章节,如,terpri和format讨论的所有输入输出函数正在编写到创建的文件。

当执行代码,它不返回任何东西;然而,数据被写入到该文件中。 :direction :output关键字可以做到这一点。

不过,我们可以使用read-line函数从这个文件中读取。

实例 2

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:


(adsbygoogle = window.adsbygoogle || \[\]).push({});

(adsbygoogle = window.adsbygoogle || \[\]).push({});

(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 Tutorials Yiibai!
This is a tutorials database
Submit your Tutorials, White Papers and Articles into our Tutorials   Directory.

关闭文件

close函数关闭一个流。

由JSRUN为你提供的Lisp在线运行、在线编译工具
        JSRUN提供的Lisp在线运行,Lisp 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

  • 00:23
注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入:


服务器已安装大部分常用的第依赖库,但仍可能存在一些未被安装的库, 可以通过本窗口立即安装所需依赖库。


请输入依赖库的名称:

请选择语言: