Lua io.lines("filename", $fmt)

使用io.lines可以读取文件的内容, 返回一个函数.

每次调用这个函数, 按照格式要求输出文件的内容.

格式如下 : 

"*n": reads a number; this is the only format that returns a number instead of a string.
"*a": reads the whole file, starting at the current position. On end of file, it returns the empty string.
"*l": reads the next line skipping the end of line, returning nil on end of file. This is the default format.
"*L": reads the next line keeping the end of line (if present), returning nil on end of file.
number: reads a string with up to this number of bytes, returning nil on end of file. If number is zero, it reads nothing and returns an empty string, or nil on end of file.

例如 : 

[root@db-172-16-3-150 ~]# pwd
/root
[root@db-172-16-3-150 ~]# ll install.log
-rw-r--r--. 1 root root 41261 Sep 26 15:30 install.log
[root@db-172-16-3-150 ~]# lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> f = io.lines("/root/install.log", "*l")  -- "*l"每次读取一行, 不添加回车.
> print(type(f))   -- f是一个函数
function
> print( f() )  -- 调用f函数, 每次返回一行,  不添加回车.
Installing libgcc-4.4.7-3.el6.x86_64
> print( f() )
warning: libgcc-4.4.7-3.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
> print( f() )
Installing ca-certificates-2010.63-3.el6_1.5.noarch
> f = io.lines("/root/install.log", "*L")  -- "*L" 每次返回一行, 同时加一个回车.
> print( f() )
Installing libgcc-4.4.7-3.el6.x86_64

> print( f() )
warning: libgcc-4.4.7-3.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

> f = io.lines("/root/install.log", 5)  -- 数字表示每次读取多少个字节, 如果是多字节字符可能有问题.
> print( f() )
Insta
> print( f() )
lling
> f = io.lines("/root/install.log", "*a")  -- "*a" 表示一次读取文件的所有内容
> print( f() )
Installing libgcc-4.4.7-3.el6.x86_64
warning: libgcc-4.4.7-3.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Installing ca-certificates-2010.63-3.el6_1.5.noarch
... 略

多字节字符, 使用数字返回, 必须要复合字节数, 否则会有问题.

[root@db-172-16-3-150 ~]# vi test.lua
你好test=100
return test
[root@db-172-16-3-150 ~]# lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> f = io.lines("/root/test.lua", 2)
> print( f() )  -- 因为UTF-8中文使用了3个字节, 所以返回有问题.
位
  > print( f() )
?半>
> print( f() )
¥?
> print( f() )
te
> print( f() )
st
-- 使用3个字节, 正常返回存储的中文.
> f = io.lines("/root/test.lua", 3)
> print( f() )
你
> print( f() )
好
> print( f() )
tes

[参考]

1. http://www.lua.org/manual/5.2/manual.html#pdf-io.lines

时间: 2024-09-30 06:32:28

Lua io.lines("filename", $fmt)的相关文章

Lua文件读写详解

  这篇文章主要介绍了Lua文件读写详解,本文讲解了文件读写的简单模型和完整模型,并给出了一个操作示例,需要的朋友可以参考下 lua里的文件读写模型来自C语言,分为完整模型(和C一样).简单模型. 1.简单模型 io.input([file]) 设置默认的输入文件,file为文件名(此时会以文本读入)或文件句柄(可以理解为把柄,有了把柄就可以找到文件),返回文件句柄. io.output([file]) 设置默认的输出文件,参数意义同上. io.close([file]) 关闭文件,不带参数关闭

Lua中的文件I/O操作教程

  这篇文章主要介绍了Lua中的文件I/O操作教程,是Lua入门学习中的基础知识,需要的朋友可以参考下 Lua中I/O库用于读取和处理文件.有两种类型的文件操作,在Lua即隐含文件的描述符和明确的文件描述符. 对于下面的例子中,我们将使用一个示例文件test.lua,如下图所示. 代码如下: -- sample test.lua -- sample2 test.lua 一个简单的文件打开操作使用下面的语句. 代码如下: file = io.open (filename [, mode]) 各种文

Lua talbe's pairs & ipairs & traverse loop, table.pack and table.unpack

Lua 表有几种形式用得比较多,一种是sequence, 一种是table, 还有一种是list. 1. sequence指没有气泡的一些元素. 例如{"hello", "nihao","yes"}是一个sequence, 索引为1开始的自增数字. 但是{"hello", "nihao", nil, "yes"} 不算序列. 因为中间有个nil气泡. > t = {"he

Lua Errors

Lua 是一个扩展性语言, 通常嵌入在其他程序中使用.所以当Lua运行错误时, 不建议简单的crash或退出, 最好是能返回错误代码和错误信息. 当lua运行时遇到某些错误会抛出异常, 例如对非数字进行数学运算, 调用不存在的函数, 使用不存在的索引取表的值. 通过metatable可以自定义这些错误. 除了这些常见的错误, 我们还可以在lua程序中使用error函数人为的产生错误. 例如, 当条件满足时, 使用error抛出异常 :  > f = io.open("/root/test1

Lua 笔记--迭代器与泛型for

        所谓"迭代器"就是一种可以遍历一种集合中所有元素的机制.在Lua中,通常将迭代器表示为函数.每调用一次函数,即返回集合中的"下一个"元素. function values(t)     local i = 0     return function()                  i = i + 1            return t[i]            end end         在上例中,values就是一个工厂.每当调用这

Lua old-style true iterator

老版本的Lua不支持for语句, 可以在函数中写循环来达到循环的目的.以下是书上的例子, 显然函数里面用了for, 所以有点毛病. > function allwords(f) >> for line in io.lines() do >> for word in string.gmatch(line, "%w+") do >> f(word) >> end >> end >> end -- 调用allwor

Lua iterator and generic for

lua有两种循环的用法1.  数字递增用法 > for i=1,10,3 do >> print(i) >> end 1 4 7 10 2. generic for用法 不写步长step则默认是1. > t = {"hello","nihao",nil,"yes"} > for k,v in ipairs(t) do >> print("k:" .. k .. "

lua generic for 循环的使用

lua的除了numeric for循环, 还有一个比较实用的循环方法. With proper iterators, we can traverse almost anything in a readable fashion. The standard libraries provide several iterators, which allow us to iterate over the lines of a file (io.lines), the pairs of a table (p

[Lua]Lua语言基础汇总(3) -- 语句

赋值 赋值的基本含义是修改一个变量或一个table中字段的值,这个和其它语言没有多少区别,但是对于Lua,有一个特性,它允许"多重赋值",也就是一下子将多个值赋予多个变量,例如以下代码: 1 2 3 local x1, x2 = 2, 4 print(x1)     -->2 print(x2)     -->4 在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值,例如以下用法,可以非常简便的交换两个元素的值: 1 2 3 4 local x1, x2 = 2,