以下程序将文本文件从Windows格式转换为POSIX格式(这意味着它将一系列回车换行符转换为换行符)
local inp = assert(io.open(arg[1], "rb"))
local out = assert(io.open(arg[2], "wb"))
local data = inp:read("a")
data = string.gsub(data, "\r\n", "\n")
out:write(data)
assert(out:close())
这是我要转换的示例
print("Hello World!")
print("\r\n")
我们可以使用lua [options] [script [args]]格式从外壳调用脚本。因此,我输入了lua文件prog.lua,并将要转换示例的文件称为example.lua,以便将其存储在arg [1]和arg [2]中:
>prog.lua exampe.lua example.lua
之后,我得到此错误:
C:\Program Files\Lua\5.3\prog.lua:1: bad argument #1 to 'open' (string
expected, got nil)
stack traceback:
[C]: in function 'io.open'
C:\Program Files\Lua\5.3\prog.lua:1: in main chunk
[C]: in ?
我认为这是第一行中io.open(arg [1],“ rb”)中函数调用的第一个参数。但是,我不明白为什么它会出错,因为示例文件应该存储在arg [1]和arg [2]中,但是转换器仍然给出错误。 有什么解决办法可以解决这个问题吗?
谢谢。
答案 0 :(得分:0)
这是Windows功能(或错误)。
直接运行Lua时,所有参数arg1 arg2 arg3
都传递到脚本(在arg
表内部和vararg ...
内部)
C:\> lua.exe program.lua arg1 arg2 arg3
将.LUA
扩展名声明为可执行文件时(如在系统中一样),则可以在命令行中省略lua.exe
,但不会将参数传递给Lua脚本。
C:\> program.lua arg1 arg2 arg3
这就是为什么您的arg[1]
是nil
的原因。
您必须以lua.exe
开始命令行,才能将参数传递给脚本。