首页 > 其他分享 >无涯教程-LISP - 文件I/O

无涯教程-LISP - 文件I/O

时间:2024-01-14 13:31:43浏览次数:26  
标签:文件 教程 stream format LISP Learnfk 无涯 创建 open

在本章中,我们将了解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

相关文章

  • 无涯教程-LISP - 输入&输出
    常见的LISP提供许多输入输出函数,我们已经使用了格式化函数和打印函数进行输出,在本节中,我们将研究LISP中提供的一些最常用的输入输出函数。Read函数下表提供了LISP最常用的输入函数-Sr.No.Function&描述1read&optionalinput-streameof-error-peof-valuerecursive-p......
  • Python教程(24)——全方位解析Python中的装饰器
    Python装饰器是一种特殊的函数,它接收一个函数作为参数,然后返回一个新的函数,用于扩展或修改原始函数的行为。装饰器提供了一种便捷的方式来在不修改被装饰函数源代码的情况下,增加、修改或包装函数的功能。通俗点说就是尽量不修改原有功能代码的情况下,给原有的功能添加新的功能。装......
  • 无涯教程-LISP - 集合(Set)
    adjoin函数首先在给定列表中查找该元素(如果找到),然后返回原始列表,否则,它将创建一个新的cons单元格,其car作为元素,而cdr指向原始列表,并返回此新列表。adjoin函数还使用:key和:test关键字参数。adjoin函数不会修改原始列表,因此要更改列表本身,您必须将adjoin返回的值分......
  • Asp.Net怎么上传图片-基础教程
    aspx页面script方法内用于判断用户上传的文件是否为自己要求的格式和展示图片的方法body内定义一个图片框用于预览用户上传的图片一个上传文件的控件一个提交按钮代码如下Script代码:$(function(){$('#uploadImage').on('change',function(){var......
  • 无涯教程-LISP - 数字(Numbers)
    CommonLisp number数据类型包括LISP支持的各种数字。LISP支持的数字类型是-IntegerRatiosFloatComplex下图显示了LISP中可用的数字层次结构和各种数字数据类型-数字类型下表描述了LISP中可用的各种数字类型数据-Sr.No.Datatype&描述1fixnum此数据类型表示......
  • Python手相识别教程6线的通用原则
    6线的通用原则线条不是无缘无故写在手上的,它们来自上天的影响和人类自身的个性。--亚里士多德手部的主要纹路被称为手掌皱纹,在子宫中的第三个月就已完全形成。在胚胎发育成胎儿的关键时刻,有关个人生命的大量信息已经铭刻在手掌上。大脑和手是由相同的干细胞构成的,它们之间的关......
  • 无涯教程-LISP - 函数声明
    函数是一起执行任务的一组语句。定义函数名为defun的宏用于定义函数,defun宏需要三个参数-函数名称函数参数函数主体defun的语法是-(defunname(parameter-list)"Optionaldocumentationstring."body)让我们用简单的示例来说明这个概念。函数-示例1让我们编写......
  • 高项改革???? 这里有最新的官方教程。 高级项目管理师
    大大咧咧,又有点后知后觉。决定软考后发现改机考了。并且是去年下半年改成机考,也就是说已经机考过一次。还好,还好,还好后知后觉的自己居然“发现”这一点。真是把自己蠢到了。。。。机考的范围应该就变大了吧,难度会不会降低呢?如果从背诵的角度看,范围变大就是难度变大。何来难度降......
  • 无涯教程-LISP - 循环语句
    在某些情况下,您需要执行一段代码次数,循环语句使我们可以多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式。LISP提供以下类型的构造来处理循环需求。单击以下链接以查看其详细信息。Sr.No.Construct&描述1loop以最简单的形式,它允许您重复执行某些语......
  • 无涯教程-LISP - 条件判断
    以下是大多数编程语言中常见的典型决策结构的一般形式-LISP提供以下类型的决策构造,单击以下链接以查看其详细信息。Sr.No.Construct&描述1cond此构造用于检查多个判断操作子句。2ifif构造具有多种形式。3when如果test子句的判断输出为true,则执行test操作,否则,对后......