中文编程入门(Lua5.4.6中文版)第十三章 Lua 文件操作

server/2024/10/20 20:32:21/

在《Lua世界》的冒险旅途中,勇士们时常需要与神秘的文本卷轴打交道。为了更好地掌握这些知识宝藏,Lua I/O库提供了两种强大的探索模式:简单模式和完全模式,助你轻松应对各类文献挑战。

简单模式:初识卷轴

简单模式如同一位初级探险家,专注于单个卷轴的研究。它拥有一把指向当前阅读卷轴(输入文件)和一把记录心得(输出文件)的魔法笔。对于简单的文献查阅与笔记记录,简单模式足以胜任。

打开卷轴之门

使用io.open(filename, [mode])咒语开启卷轴。mode的不同字符组合决定了你与卷轴的互动方式:

  • r:只读模式,仅查阅卷轴内容,确保卷轴存在。
  • w:写入模式,清空已有内容,或创建新卷轴。
  • a:追加模式,在卷轴末尾添加记录,保留原有内容。
  • r+:读写模式,查阅并修改现有卷轴,确保卷轴存在。
  • w+:与w类似,但允许同时读取。
  • a+:与a类似,但允许同时读取。
  • b:二进制模式,适用于处理特殊符文(二进制文件)。

简单模式操作实例

在名为file.lua的法术书中,勇士们尝试查阅与增补名为test.lua的卷轴:

  1. 以只读模式打开test.lua

    局部 文件名 = 端口.打开("测试.lua", "r")
  2. 设置当前阅读卷轴为test.lua

    端口.输入(文件名)
  3. 阅读首行文字:

    输出(端口.读取())
  4. 关闭阅读的卷轴:

    端口.关闭(文件名)
  5. 以追加模式打开test.lua

    文件名 = 端口.打开("测试.lua", "a")
  6. 设置当前记录卷轴为test.lua

    端口.输出(文件名)
  7. 在卷轴末尾添加注解:

    端口.写入("-- 测试.lua 文件末尾注解")
  8. 关闭记录的卷轴:

    端口.关闭(文件名)

执行以上法术后,勇士们不仅读取了test.lua首行内容,还在卷轴末尾留下了注解。

完全模式:卷轴大师

对于那些需要同时研读多卷轴、进行精细操作的高级探险家,完全模式宛如一位卷轴大师。它以面向对象的方式,通过掌控特定卷轴的“句柄”,实现对卷轴的各种复杂操作。

完全模式操作实例

完全模式下,勇士们可以直接通过卷轴句柄施展魔法:

  1. 以只读模式打开test.lua

    局部 文件名 = 端口.打开("测试.lua", "r")
  2. 阅读首行文字:

    输出(文件名:读取())
  3. 关闭阅读的卷轴:

    文件名:关闭()
  4. 以追加模式打开test.lua

    文件名 = 端口.打开("测试.lua", "a")
  5. 在卷轴末尾添加注解:

    文件名:写入("-- 测试.lua 文件末尾注解\n")
  6. 关闭记录的卷轴:

    文件名:关闭()

执行以上法术后,同样实现了与简单模式相同的效果。

探索卷轴深处

完全模式还提供了更细致的卷轴探索手段:

  • file:seek([whence], [offset]):定位卷轴指针。whence可选值为"set"(文件头)、"cur"(当前位置,默认)、"end"(文件尾)。offset为偏移量,不指定则返回当前位置。
  • file:flush():立即将缓冲区中的内容写入卷轴,确保记录及时保存。
  • io.lines([filename]):返回一个迭代函数,每次调用获取卷轴中下一行内容,直至末尾返回nil。若不指定filename,默认读取当前输入设备的内容。

实战演练:定位卷轴秘文

以下法术使用seek方法定位到test.lua卷轴倒数第25个字符,并读取剩余全文:

  1. 以只读模式打开test.lua

    局部 文件名 = 端口.打开("测试.lua", "r")
  2. 定位至倒数第25个字符:

    文件名:定位("尾", -25)
  3. 读取剩余全文:

    输出(文件名:读取("a"))
  4. 关闭阅读的卷轴:

    文件名:关闭()

执行完毕,勇士们成功揭示了卷轴深处的秘密文字。

结语

不论是初涉卷轴的初级探险家,还是游刃有余的卷轴大师,Lua I/O库的简单模式与完全模式皆能助你在《Lua世界》的文献海洋中畅游无阻,轻松应对各类文献挑战。掌握这两种模式,你将成为真正的知识猎人,无所畏惧地探索每一个未知角落。


http://www.ppmy.cn/server/6324.html

相关文章

简单的LRU本地缓存实现-Java版本

文章目录 什么是缓存缓存的种类缓存的关键特性缓存的优势与挑战优势:挑战: 缓存的应用场景什么是LRUCacheLRU 缓存的工作原理核心操作为何选择 LRU使用场景 一个简单的LRU缓存实现相关资料基础资料 什么是缓存 缓存(Cache)是一种…

20240329-1-SVM面试题

SVM面试题 1. SVM直观解释 SVM,Support Vector Machine,它是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;其还包括核技巧,这使它成为实质上的非线性分类…

SpringCloud之LoadBalancer负载均衡器的简单使用

SpringCloud之LoadBalancer负载均衡器的简单使用 loadbalancer用于对提供服务的集群做一个节点的选取规则。 如图所示&#xff0c;load balancer集成在调用方 示例 创建loadbalance-base模块,并引入相关依赖 <dependencies><dependency><groupId>org.spr…

(五)小案例银行家应用程序-实现转账

现在我们想实现用户之间相互转账的功能&#xff1b; ● 和之前一样我们还是要通过这个点击&#xff0c;页面元素一再写在变量里面了 在这里插入图片描述 btnTransfer.addEventListener(click, function (e) {e.preventDefault();const amount Number(inputTransferAmount.val…

腾讯云免费ssl证书申请与宝塔手动部署

1.在我的证书 - SSL 证书 - 控制台 (tencent.com)页面点击“申请免费证书” 2.在申请页面填写域名、邮箱&#xff0c;对于其中“验证方式”&#xff0c;如果服务器是部署在腾讯云的话&#xff0c;可以选“自动DNS” 3.等待审核通过之后&#xff0c;在我的证书 - SSL 证书 - 控…

Vue.extend()和我的两米大砍刀

Vue.extends是什么&#xff1f; 一个全局API,用于注册并挂载组件。 传统的引用组件的方式是使用import直接引入&#xff0c;但是使用Vue.extends()也可以实现。 使用规则 <div id"mount-point"></div>// 创建构造器 var Profile Vue.extend({templat…

【每日一题】2007. 从双倍数组中还原原数组-2024.4.18

题目&#xff1a; 2007. 从双倍数组中还原原数组 一个整数数组 original 可以转变成一个 双倍 数组 changed &#xff0c;转变方式为将 original 中每个元素 值乘以 2 加入数组中&#xff0c;然后将所有元素 随机打乱 。 给你一个数组 changed &#xff0c;如果 change 是 双…

MySQL内置函数

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;MySQL &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容涉及了MySQL中的内置函数 文章目录 MySQL内置函数1.日期…