【Lua 入门基础篇(十)】文件I/O

news/2024/5/20 14:21:39/文章来源:https://blog.csdn.net/qq_52678569/article/details/125782347

在这里插入图片描述
在这里插入图片描述

文章目录

  • 一、文件 I/O
  • 二、简单模式
    • 1. io.lines([filename])
  • 三、完全模式
    • 1. file:lines()

一、文件 I/O

Lua I/O 库用于读取和处理文件。分为简单模式、完全模式。

  • 简单模式(simple model):拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。

  • 完全模式(complete model) :使用外部的文件句柄来实现。它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法。

打开文件操作语句如下:

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

【mode】:

在这里插入图片描述


二、简单模式

简单模式使用标准的 I/O 或使用一个当前输入文件和一个当前输出文件

file = io.open('a.txt', 'r')
io.input(file)
print(io.read()) -- a.txt读入第一行
io.close(file)
file = io.open('a.txt', 'r')
io.output(file)
io.write("lua") -- 输出定向到文件a.txt中
io.close(file)

io.read()参数:

在这里插入图片描述
代码演示:

file = io.open('./a.txt', 'w')
io.output(file)io.write('zzz\n')
io.write('111\n')
io.write('222\n')
io.write('aaa\n')io.close(file) -- 保证数据写入file

a.txt:

zzz
111
222
aaa
file = io.open('./a.txt', 'r')
io.input(file)
print("read('*n')", io.read('*n'))
io.close(file)

运行输出;

read('*n')		nil

如果a.txt文件第一行是数字开头(例:12x),那么会读完数字(输出:12)。


file = io.open('./a.txt', 'r')
io.input(file)
print("read('*a')", io.read('*a'))
io.close(file)

运行输出:

read('*a')		zzz
111
222
aaa

其他的 io 方法有:

  • io.tmpfile():返回一个临时文件句柄,该文件以更新模式打开,程序结束时自动删除。

  • io.type(file):检测obj是否一个可用的文件句柄。

  • io.flush():向文件写入缓冲中的所有数据。

  • io.lines(optional file name):返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回 nil,但不关闭文件。

1. io.lines([filename])

原型:io.lines ([filename])

解释:按文件名以读的模式打开一个文件,并且返回一个迭代函数。这个迭代函数每一次被调用都会返回文件中新的一行的内容,直到文件中所有的内容都被读完。当迭代函数检测到文件末尾时,它会返回nil来结束循环并自动关闭文件

  • 常用形式(读取整个文件内容):
for line in file do print(line) end
  • 自动关闭文件示例:
local file = io.lines('./a.txt')print(file())
print(file())
print(file())
print(file())
print(file()) -- nil or 空-- 到此文件已经自动关闭
-- io.close(file) or file() 都会报错!

三、完全模式

通常我们需要在同一时间处理多个文件。我们需要使用 file:function_name 来代替 io.function_name 方法。


1. file:lines()

lines函数还有另一种表现形式:file:lines()

如果设置了io.input(file),那么这样就等价于:io.input():lines()

file = io.open('./a.txt')
for line in file:lines() do print(line) end
io.close()
file = io.open('./a.txt')
io.input(file)
for line in io.input():lines() do print(line) end
io.close()

read 的参数与简单模式一致。

其他方法:

  • file:seek(optional whence, optional offset):设置和获取当前文件位置,成功则返回最终的文件位置(按字节),失败则返回nil加错误信息。参数【whence】:

    • “set”: 从文件头开始
    • “cur”: 从当前位置开始[默认]
    • “end”: 从文件尾开始
    • offset:默认为0

不带参数file:seek()则返回当前位置;
file:seek("set")则定位到文件头;
file:seek("end")则定位到文件尾并返回文件大小;

  • file:flush():向文件写入缓冲中的所有数据。

a.txt

zzz
111
222
aaa
local file = io.open('./a.txt')
file:seek('end', -10)
print(file:read('*a'))
file:close()

运行输出:

1
222
aaa

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

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

相关文章

倾向得分匹配PSM案例分析

倾向得分匹配(PSM),是一种模仿RCT随机对照试验随机化分组,提高组间均衡性,进而达到降低混杂因素影响目的一种数据处理策略。PSM在计量研究,临床医学等领域有着广泛的应用。 1.案例背景与分析策略 1.1 案例背景介绍 某企业想评价…

IDEA编译项目找不到符号

问题描述 场景: 某个bean添加了一个字段; idea使用Git拉取代码后,新建分支提交,然后修改再切换其他分支,发生了代码冲突; 然后解决代码冲突,开始编译项目,报错找不到符号. 问题分析 1.查看控制台日志输出,找报错代码行。 2.lombok插件注解未生效。 3.编码问题; 4.jdk…

vue基础语法(上)

目录 一、插值 1、文本 2、html 3、属性 4、表达式 5、class绑定 6、style绑定 二、指令 1、核心指令 注:v-show和v-if区别 三、过滤器 1、全局过滤器 2、局部过滤器 四、计算属性与监听属性 1、计算属性 2、监听属性 3、计算属性和监听属性的区别 …

李沐d2l(十一)--锚框

文章目录一、概念二、代码1 生成锚框2 IoU(交互比)3 将真实边界框分配给锚框4 标记类和偏移5 应用逆偏移变换来返回预测的边界框坐标6 nms7 将非极大值抑制应用于预测边界框一、概念 在目标检测算法中,通常会在输入图像中采样大量的区域(生成多个边缘框&…

ELASTICSEARCH快速入门

1. ELASTICSEARCH 1、安装elastic searchdokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2docker pull kibana:7.6.2 (2)配置 mkdir -p /mydata/elasticsearch/config 创建目录mkdir -p /mydata/elasticsearch/dataecho "…

fastapi+mongo+qlib:体系化构建AI量化投研平台

百天计划之第34篇,关于“AI量化投资研究平台”建设。 从今天开始要开始一条主线——就是开始搭建整个投研平台。 如果说8月开始是知识点的梳理,一些基础技术的准备(以qlib和机器学习为核心),9月开始重点是“以解决真…

.NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。

更新数据 第一种: 先从数据库中取出数据,然后再更新字段。效率较低,需要2次数据库操作; Entities:就是EF实体数据模型 using (var db new Entities()) { var data db.Member.Find(5); data.Name “new name”; db.…

基于Springboot+vue的玩具销售商城网站 elementui

爱玩儿是所有孩子的天性。尤其是在婴幼儿阶段。选择一个好的玩具,不仅能够让孩子玩儿的开心,而且有助于孩子智力的开发。很多家长在选择玩具的时候,不知道选择什么样的玩具。且当前玩具市场的玩具鱼目混杂,种类繁多,而…

cmake和makefile区别和cmake指定编译器(cmake -G)

一 cmake和makefile区别 要说明区别,我们先要区分下面三类工具: 1.项目构建生成工具 首先cmake是项目构建生成工具,cmake的代码可以与平台系统和编译器无关。类似cmake的工具还有autotools、qmake、GN,其中qmake已基本由cmake替代。cmake下载地址 cmake.org.cn 也就是说cma…

1.初识jQuery

jQuery是JS的库,封装了原生JS的一些DOM方法,使JS用起来更方便 目录 1 下载jQuery 2 jQuery的基本使用方式 3 jQuery入口函数 1 下载jQuery jQuery官网 jQuery 点击这里进入下载页面,我当前的版本为 3.6.1,如果你想下载之…

2022极端高温!人工智能如何预测森林火灾?| 万物AI

💡 作者:ShowMeAI编辑部 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢 收藏ShowMeAI查看更多精彩内容 8月21日晚,重庆北碚区山火一路向国家级自然保护区缙云山方向蔓延。为守护家园&…

LabVIEW通过网络传输数据

LabVIEW通过网络传输数据 选择应用程序的联网功能时,最重要的因素是应用程序使用的通信模型。不同的通信模型具有不同的数据传输要求。下表列出了最常见的几种通信模型以及推荐功能。 通信模型 说明 范例 推荐联网功能 处理数据 传输最新数据,从一…

Vue模块语法上(插值指令过滤器计算属性-监听属性)

文章目录 一、插值 1)文本 2)html 3)属性 4)表达式 5)class绑定 6)style绑定 二、指令 1.v-if|v-else|v-else-if 2.v-show 3.v-for 4.v-bind 5.v-on 6.v-model 三、过滤器 全局过滤器 局部过滤器…

从零开始配置SSH密钥到github

最近电脑新环境,重新配置SSH 密钥链接GitHub 1 git安装 1.1 下载git 在官网下载git.exe 下载地址》 https://github.com/git-for-windows/git/releases/download/v2.37.3.windows.1/Git-2.37.3-64-bit.exe 1.2 安装git 双击运行程序,然后一直下一步…

for3.0测试题(必看)

for循环测试题:99乘法表11=112=2 22=413=3 23=6 33=914=4 24=8 34=12 44=1615=5 25=10 35=15 45=20 55=2516=6 26=12 36=18 46=24 56=30 66=3617=7 27=14 37=21 47=28 57=35 67=42 77=4918=8 28=16 38=24 48=32 58=40 68=48 78=56 88=6419=9 29=18 39=27 49=36 59=45 69=54 79…

彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03

前文再续,之前一篇我们已经配置好了数据库以及模板引擎,现在可以在逻辑层编写具体业务代码了,博客平台和大多数在线平台一样,都是基于用户账号体系来进行操作,所以我们需要针对用户表完成用户账号的CURD操作。 用户后…

Hadoop 3.x(入门)----【Hadoop概述】

Hadoop 3.x(入门)----【Hadoop概述】1. Hadoop是什么2. Hadoop发展历史(了解)3. Hadoop三大发行版本(了解)4. Hadoop优势(4高)5. Hadoop组成(重点)1. HDFS架构…

Express--获取URL中携带的查询参数、获取URL中的动态参数、获取URL中的动态参数

Express获取URL中携带的查询参数 通过req.query对象,可以访问到客户端查询字符串形式,发送给服务器参数 req.query默认是一个空对象客户端使用url的地址是?键值对&键值对(?namejs$age78)等这种查询字符串形式,发送到服务器的参数----…

Oracle P6 -SQLServer数据库乱码案例分享

此案例根据近几日根一盆友提到的问题分享总结 简单说下P6的基本参数 P6Version: Primavera P6 21.12.0Database: Microsoft SQLServer 2017Server : Windows Server 2016 问题描述: 在P6 Professional (桌面客户端) 中输入中文的内容,无论是EPS名称&a…

【云原生 • Kubernetes】kubernetes 核心技术 - 集群安全机制

本文导读一、集群安全机制概述1.认证2. 鉴权(授权)3. 准入控制二、RBAC 概述三、RBAC 角色绑定操作演示一、集群安全机制概述 要知道,访问 Kubernetes 集群必需要进行三个步骤,即: 认证鉴权(授权)准入控制 而这个访问过程均需经过 apiserver…