2012-09-30 22 views
1

我只是学习Lua和我的书(编程在Lua)有一些代码在它认为“读取第10行的文件中:”将文件的前10行读入Lua表的正确代码?

a = {} 
for i=1,10 do 
    a[#a+1] = io.read() 
end 

这并不真正使对我来说任何意义;这不读取十个零值吗?有人可以解释一下吗?

+1

'io.read()'相当于'io.read(“* l”)'。 – lhf

+0

[如何只读取Lua中文本文件的最后一行?](http://stackoverflow.com/questions/497311/how-to-read-only-the-last-line-of-a -text-文件中,LUA) – hjpotter92

回答

3

简短版本:归结为io.input是否在您的问题中没有列出的代码中被调用。如果它被调用,它将打印该文件的前10行(在下面详细解释)。如果它之前没有被调用,并且正在从命令行运行或者以交互方式运行,那么一旦该代码执行,它将打印输入到控制台的前10行。对于其他情况,这取决于应用程序的启动方式。

Lua 5.1参考手册io.read说以下内容:

io.read(...)

相当于io.input():读出。

而对于io.input的文件说:

当一个文件名调用时,它打开指定的文件(文本模式),并设置其手柄为默认输入文件。当用文件句柄调用时,它只是将此文件句柄设置为默认输入文件。当不带参数调用时,它返回当前的默认输入文件。 [...]

而对于file.read文档(file是通过调用io.input()返回的对象)说:

读取文件文件,根据给定的格式,指定哪些读书。对于每种格式,该函数都返回一个字符串(或一个数字)和读取的字符,如果无法读取具有指定格式的数据,则返回nil。当没有所谓的格式,它采用了默认格式读取整个下一行[...]

那么有两种可能的位置:

  • io.input用参数以前称为(一些代码没有在你的问题中显示),设置默认输入文件。不带参数调用io.read将返回该输入文件的“默认格式”,即“整个下一行”。
  • io.input不是以前用一个参数调用(如果没有附加代码,在你的情况下是真的)。不带参数的调用io.read将返回标准输入的“整个下一行”,如用户的命令行输入(如果程序从命令行运行)。

在第一种情况下,nil将在完成读取文件的所有行后返回io.read()。这可能意味着读取了nil的10个实例,但它取决于文件。

在第二种情况下,如果标准输入已用完,可能会返回nil,这可能以不同方式发生,具体取决于应用程序的启动方式。这也可能意味着nil的10个实例。