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

I/O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式(Implicit)和显式(Explicit)操作。

对于以下示例,无涯教程将使用例文件test.lua,如下所示。

-- sample test.lua
-- sample2 test.lua

一个简单的文件打开操作使用以下语句。

file=io.open (filename [, mode])

下表列出了各种文件模式。

Sr.No.Mode & Remark
1

" r"

只读模式,是打开现有文件的默认模式。

2

" w"

启用写模式,该模式将覆盖现有文件或创建新文件。

3

" a"

追加模式,用于打开现有文件或创建要追加的新文件。

4

" r +"

现有文件的读写模式。

5

" w +"

如果文件存在或具有读写权限的新文件被删除,则所有现有数据都将被删除。

6

" a +"

启用了读取模式的追加模式可以打开现有文件或创建新文件。

隐式操作

隐式(Implicit)文件描述符使用标准输入/输出模式,或使用单个输入和单个输出文件。下面显示了使用隐式文件描述符的示例。

-- Opens a file in read
file=io.open("test.lua", "r")

-- sets the default input file as test.lua
io.input(file)

-- prints the first line of the file
print(io.read())

-- closes the open file
io.close(file)

-- Opens a file in append mode
file=io.open("test.lua", "a")

-- sets the default output file as test.lua
io.output(file)

-- appends a word test to the last line of the file
io.write("-- End of the test.lua file")

-- closes the open file
io.close(file)

运行该程序时,将获得test.lua文件第一行的输出。

-- Sample test.lua

这是test.lua文件中语句的第一行。同样,"-test.lua文件的结尾"行将附加到test.lua代码的最后一行。

在上面的示例中,您可以看到使用io。上面的示例使用不带可选参数的io.read()。可选参数可以是以下任意一个。

Sr.No.Mode & Remark
1

" * n"

从当前文件位置读取并返回一个数字(如果文件位置存在)或返回nil。

2

" * a"

从当前文件位置返回文件的所有内容。

3

" * l"

从当前文件位置读取该行,并将文件位置移至下一行。

4

number

读取函数中指定的字节数。

其他常见的I/O方法包括

  • io.tmpfile()                              - 返回用于读取和写入的临时文件,一旦程序退出,该文件将被删除。

  • io.type(file)                              - 根据输入文件返回file,close file还是nil。

  • io.flush()                                   -  清除默认输出缓冲区。

  • io.lines(optional file name)  - 提供通用的 for 循环迭代器,循环遍历文件并最终关闭文件,以防万一在循环末尾提供了文件名未关闭该文件。

显式操作

无涯教程经常使用显式(Explicit)文件描述符,该描述符允许一次处理多个文件。这些函数与隐式文件描述符非常相似。在这里使用file:function_name而不是io.function_name。下面显示了相同隐式文件描述符示例的文件版本的以下示例。

-- Opens a file in read mode
file=io.open("test.lua", "r")

-- prints the first line of the file
print(file:read())

-- closes the opened file
file:close()

-- Opens a file in append mode
file=io.open("test.lua", "a")

-- appends a word test to the last line of the file
file:write("--test")

-- closes the open file
file:close()

运行程序时,您将得到与隐式描述符示例类似的输出。

-- Sample test.lua

外部描述符的所有文件打开模式和参数读取方式与隐式文件描述符相同。

其他常见的文件方法包括

  • file:seek(optional whence,optional offset)     -   whence参数为" set"," cur"或" end"。从文件开头设置具有更新文件位置的新文件指针。该函数的偏移量从零开始。如果第一个参数为" set",则从文件开头开始偏移;如果它是" cur";或从文件末尾开始(如果是" end")。默认参数值为" cur"和0,因此可以通过不带参数调用此函数来获取当前文件位置。

  • file:flush()                                                                   -   清除默认输出缓冲区。

  • io.lines(optional file name)                                     -   提供 for 循环迭代器,循环遍历文件并最终关闭文件,以防万一在循环末尾提供了文件名未关闭该文件。

下面显示了使用seek方法的示例。它使光标从文件结尾之前的25个位置偏移。读取函数从搜索位置打印文件的其余部分。

-- Opens a file in read
file=io.open("test.lua", "r")

file:seek("end",-25)
print(file:read("*a"))

-- closes the opened file
file:close()

您将获得类似于以下内容的输出。

sample2 test.lua
--test

您可以试玩所有不同的模式和参数,以了解Lua文件操作的全部函数。

Lua - 文件I/O - 无涯教程网无涯教程网提供I/O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式(Implicit )和显式(Ex...https://www.learnfk.com/lua/lua-file-io.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/57853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day11-Webpack前端工程化开发

Webpack 一 webpack基本概念 遇到问题 开发中希望将文件分开来编写,比如CSS代码,可以分为头部尾部内容,公共的样式。 JS代码也希望拆分为多个文件,分别引入,以后代码比较好维护。 本地图片,希望可以实现小图片不用访问后端,保存在前端代码中就可以了 运行程序时我…

mongodb docker 及常用命令

MongoDB属于非关系型数据库,它是由C编写的分布式文档数据库。内部使用类似于Json的bson二进制格式。 中文手册 https://www.w3cschool.cn/mongodb/ 安装 https://www.mongodb.com/try/download/community 二进制安装可见另一篇: centos7 mongodb 4.0.28…

RabbitMQ 教程 | 第8章 跨越集群的界限

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

轻量化YOLOv5改进 | 结合repghost结构冲参数化网络,实现轻量化和加速推理,

RepGhost: A Hardware-Efficient Ghost Module via Re-parameterization 论文总结本文改进repghost 核心代码测试参数量和计算量🔥🔥🔥 “引入RepGhostNet以加速CNN网络推理” “网络宽度的自定义调整:无缝嵌入YOLOv5” “通过结构重参数化优化网络性能” “实现高效和…

ChatGPT能否撰写科研论文?

ChatGPT,这款被许多人誉为语言处理领域的“黑马”,究竟能否应用于撰写科研论文?近期,以色列理工学院生物学家兼数据科学家Roy Kishony带领的团队,针对这一问题进行了系列研究,其结果已在《Nature》杂志上发…

【运维】在阿里云上搭建自己的图床,配合PicGo和Typora使用

本文将详细介绍如何在阿里云上搭建自己的图床,包括购买OSS服务、配置域名解析、创建OSS存储桶和设置图片上传规则等步骤。希望对您有所帮助! 一、购买OSS服务 首先,我们需要在阿里云官网购买OSS(Object Storage Service)服务。OSS是阿里云提…

springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池

一、安装部署 1、我这里使用的 3.0.7.1版本,因为我看3.x版本已经发布了一年了,增加了很多新的功能,而且3.x官方推荐,对于2.x的版本,官网都已经推荐进行升级到3.x,所以考虑到项目以后的发展,决定…

django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏

一、实现的效果 在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可) 点击折叠按钮,左侧区域隐藏,右侧区域铺满: 二、实现思路 1、使用col-md属性,让左…

SOC FPGA之流水灯设计

一、DS-5简介 Altera Soc EDS开发套件的核心是Altera版ARM Development Studio 5(DS-5)工具包,为SoC器件提供了完整的嵌入式开发环境、FPGA自适应调试和对Altera工具的兼容。 1.1 DS-5 eclipse破解 首先下载破解器 然后进入cmd运行,进入到破解器所在文…

【八】mybatis 日志模块设计

mybatis 日志模块设计 简介:闲来无事阅读一下mybatis的日志模块设计,学习一下优秀开源框架的设计思路,提升自己的编码能力 模块设计 在Mybatis内部定义了4个级别:Error:错误 、warn:警告、debug:调试、trance,日志优…

【计算机网络】应用层协议 -- DNS协议

文章目录 1. DNS背景2. 域名简介3. 域名解析过程4. 使用dig查看DNS过程 1. DNS背景 DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。 TCP/IP当中通过IP地址和端口号的方式,来确定…

C语言之结构体篇(简)

结构体 结构体的认知结构体的声明一般声明特殊声明匿名结构体类型 结构体自引用结构体变量的定义与初始化结构体变量的定义结构体变量的初始化 结构体传参结构体内存对齐位段位段声明位段的内存分配位段跨平台问题: 结构体是由我们自己创造的一种类型,使得C语言有能…

js-匈牙利算法

匈牙利算法 素数伴侣新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的K…

H5打包封装小程序系统开发

H5打包封装小程序系统开发 H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤: 准备工作:首先,需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行,并且没有依赖于浏览器特…

『赠书活动 | 第十六期』《深入浅出Java虚拟机:JVM原理与实战》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第十六期』 本期书籍:《深入浅出Java虚拟机:JVM原理与实战》 赠书规则:评论区:点赞&#xff…

将Visio和Excel导出成没有白边的PDF文件

1、VISIO如何无白边导出pdf格式 在使用Latex时,要导入矢量图eps格式。但是VISIO无法输出eps格式,这就需要将其导出为pdf。但是导出pdf时,往往会有大量的白边。VISIO无白边导出pdf格式的方法如下: 1.文件——开发工具——显示sha…

并发 如何创建线程 多线程

进程:一个程序的执行过程 线程:一个方法就是一个线程 并发:多个线程抢夺一个资源 操作同一个对象 创建线程方法1 //创建线程方法1 继承Thread类 重写润方法 调用start开启线程 public class TestThead extends Thread{Overridepublic voi…

redis 高级篇 redis 源码的读取分析

一 redis源码分析 1.1 源码分析 1每一个kv键值对应有一个dictEntry。 2.底层数据结构

景联文科技高质量成品数据集上新啦!

景联文科技近期上新多个成品数据集,包含图像、视频等多种类型的数据,涵盖丰富的场景,可满足不同模型的多元化需求。 高质量成品数据集可用于训练和优化模型,使得模型能够更加全面和精准地理解和处理任务,更好地应对复…

eclipse was unable to locate its companion shared library

当转移或者Copy工程时, eclipse was unable to locate its companion shared library eclipse.ini 里面的路径配置错误导致 --launcher.library C:/Users/**/.p2/pool/plugins/org.eclipse.equinox. launcher.win32.win32.x86_64_1.2.700.v20221108-1024 -product …