【问题标题】:Proper code for reading the 1st 10 lines of a file into a Lua table?将文件的前 10 行读入 Lua 表的正确代码?
【发布时间】:2012-10-01 15:42:12
【问题描述】:

我刚刚学习 Lua,我的书(Lua 编程)中有一些代码“读取文件的前 10 行:”

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

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

【问题讨论】:

标签: lua


【解决方案1】:

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

io.readLua 5.1 参考手册说明如下:

io.read(···)

等效于 io.input():read.

io.input 的文档说:

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

file.readfile 是调用 io.input() 返回的对象)的文档说:

根据给定的格式读取文件file,这些格式指定要读取的内容。对于每种格式,该函数返回一个字符串(或一个数字),其中包含已读取的字符,如果无法读取指定格式的数据,则返回 nil。当不带格式调用时,它使用读取整个下一行的默认格式 [...]

所以这里有两种可能:

  • io.input 之前使用参数(您的问题中未显示某些代码)调用,设置默认输入文件。不带参数调用io.read 将返回该输入文件的“默认格式”,即“整个下一行”。
  • io.input 之前 没有 使用参数调用过(如果没有其他代码,这在您的情况下是正确的)。不带参数调用io.read 将返回标准输入的“整个下一行”,例如如果程序从命令行运行,则返回用户的命令行输入。

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

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

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2015-07-05
    • 2011-05-13
    相关资源
    最近更新 更多