【发布时间】:2016-12-30 19:59:43
【问题描述】:
我对 Lua 还很陌生,所以我在将数据从 csv 文件读取到表格时遇到了一些麻烦。 csv 文件由四列组成。第一列是一个字符串,其他三列是双精度值。 我要做的是:打开文件,读入数据并处理数据。 为了测试,我想将数据打印到屏幕上。稍后我必须打开另一个文件,一个机器人程序,并将数据传递给这个程序。
我使用 consol 命令lua Script.lua 执行脚本。但我得到的只是错误消息lua: Script.lua:22: bad argument #1 to ´format´ (number expected, got nil)
stack traceback: [C]: in function ´string.format´ script.lua:22: in main chunk [C]: in?
谁能告诉我我做错了什么?
编辑:所以我稍微改变了我的脚本。所以这是我的新代码
local open = io.open
local function read_file(path)
local file = open(path, "r") -- r read mode and b binary mode
--if not file then return nil end
local coordinates = {}
for line in io.lines(path) do
local coordinate_name, coordinate_x, coordinate_y, coordinate_z = line:match("%s*(.-),%s*(.-),%s*(.-),%s*(.-)")
coordinates[#coordinates+1] = { coordinate_name=coordinate_name, coordinate_x = tonumber(coordinate_x), coordinate_y = tonumber(coordinate_y), coordinate_z = tonumber(coordinate_z) }
end
--file:close()
return coordinates
end
local coordinates = read_file("data.csv")
for _, coordinate in ipairs(coordinates) do -- use pairs or ipairs to iterate over tables
print(("X: %s, Y: %s, Z: %s"):format(coordinate.coordinate_x,
coordinate.coordinate_y,
coordinate.coordinate_z))
end
return 0;
现在我可以执行脚本了,但打印到屏幕上的所有内容都是:X: nil, Y: nil, Z: nil。据我了解 LUA,nil 表示没有值被读取到表中。
编辑:我要读取的文件如下所示:
After;-5;-5;0;
After;-2;-5;0;
After;5;-5;0;
After;5;-2;0;
After;5;5;0;
After;2;5;0;
After;-5;5;0;
After;-5;2;0;
After;-5;-5;0;
Intersects;5;-4;0
Intersects;-5;-4;0
Intersects;-5;-3;0
Intersects;5;-3;0
Intersects;5;-2;0
Intersects;-5;-2;0
编辑:现在更新的代码:
local open = io.open
local function read_file(path)
local file = open(path, "r") -- r read mode and b binary mode
--if not file then return nil end
local coordinates = {}
for line in io.lines(path) do
local coordinate_name,
coordinate_x,
coordinate_y,
coordinate_z = line:match("%s* (.*);%s*(.*);%s*(.*);%s*(.*);%s*(.*)")
coordinates[#coordinates+1] = { coordinate_name = coordinate_name, coordinate_x = tonumber(coordinate_x), coordinate_y = tonumber(coordinate_y), coordinate_z = tonumber(coordinate_z) }
print(("X: %s Y: %4f Z: %s"):format(coordinates.coordinate_x,
coordinates.coordinate_y,
coordinates.coordinate_z))
end
for _, coordinate in ipairs(coordinates) do
print(coordinates.coordinate_x, coordinates.coordinate_z, coordinates.coordinate_z)
end
file:close()
return coordinates
end
local coordinates = read_file("data.csv")
for _, coordinates in ipairs(coordinates) do -- use pairs or ipairs to iterate over tables
print(("X: %s, Y: %s, Z: %s"):format(coordinates.coordinate_x,
coordinates.coordinate_y,
coordinates.coordinate_z))
end
return 0;
我在 Windows 上使用 Lua 5.3.3,脚本是在 LuaEdit 中编写的,并由 lua Script.lua 行调用。
【问题讨论】: