• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Luaio.lines()

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

从文章的题目可以看出,今天的内容是和文件的行相关的,其实这个函可以看成是一个文件读取函数,只不过文件读取的形式固定了,就是只能一行一行的读,接下来我们就一起来看看这个函数究竟要怎么使用。

内容#


iolines()##

  • 原型:io.lines ([filename])
  • 解释:按文件名以读的模式打开一个文件,并且返回一个迭代函数,这个迭代函数每一次被调用都会返回文件中新的一行的内容,直到文件中所有的内容都被读完,常用的代码形式为for line in io.lines(filename) do body end,当迭代函数检测到文件末尾时,它会返回nil来结束循环并自动关闭文件,这个函数还有另一种表现形式,那就是file:lines(),如果我们不加文件名的话,像这样io.lines()的函数等价于io.input():lines()

Usage##

  • 首先我们新建一个文件,将文件命名为linestest.lua然后编写如下代码:
local contentfunc = io.lines("linestest.txt")
print("contentfunc is :")
print(contentfunc)

print("\nfirst file content is :")

-- 先手动调用一次
local content = contentfunc()
print(content.."\n")

-- 再手动调用一次
local content = contentfunc()
print(content.."\n")

-- 迭代调用
for cnt in contentfunc do
    print(cnt)
end

-- 直接全部迭代调用
print("\nsecond file content is :")
for cnt in io.lines("linestest.txt") do
    print(cnt)
end

-- 使用文件描述符迭代
print("\nthird file content is :")
local myfile = io.open("linestest.txt");
for cnt in myfile:lines() do
    print(cnt)
end

myfile:close()
  • 运行结果
 
io_lines.png

总结#

  • 使用这个函数最重要的一点就是记住这个函数的返回类型,他返回的内容还是一个函数,并且每一次调用这个迭代函数都能取得新一行的值,这个是不是和我们之前讲的闭合函数很相似,有兴趣的可以再看一下这篇文章Lua closure.
  • 注意函数io.lines(filename)file:lines()的使用有什么不同,实际上后者在函数调用完之后并不会自动关闭文件,代码最后myfie:close()函数的调用没有报错,也说明了这个问题。
  • 由于这个函数是以读的模式打开文件的,所以要求文件必须存在,否则就会报错,所有在使用之前最好先检查一下文件是否存在。


作者:AlbertS
链接:https://www.jianshu.com/p/67e56c32413b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua搭配Unity实现简单计时器发布时间:2022-07-22
下一篇:
OpenResty(Nginx+Lua)常用操作发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap