从csv文件读取双精度值到表格中
2017-5-23 10:34:1
收藏:0
阅读:68
评论:1
首先我想提到这是我第一次编写Lua程序。我需要开发一个Lua应用程序,来读取CSV文件。该文件包含四列和一个未知数量的行。因此我必须读取文件的所有行。在每一行中存储着点的xyz坐标。这些坐标存储为双精度值。现在我需要将这些值从csv文件复制到一个表格(Lua中的数组)中。稍后在文件中,我需要编辑一个igm Robot的机器人程序。因此我需要这个表格。到现在为止,我有了以下代码,但我不确定这是否是正确的开始:
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 content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
os.execute(“OpenGLM_3.exe -slicesize 3 -model cube_2.stl -ascii - eulerangles 0 0 0”)
local fileContent = read_file(“ data.csv”);
return 0;
所以我首先执行一个C ++程序,它创建CSV文件,但后来我想更改流程,使C ++程序独立于Lua脚本。这一行只是用于测试。在此行之后,我想将数据从csv文件读取到表格中,并将表格打印到屏幕上。对我而言,我只需将文件的内容打印到命令行中,以便我可以检查脚本是否正确运行。
我以前从未使用过Lua,文档对我来说真的很难理解。因此,如果您能给我任何帮助,我将不胜感激。
编辑:我现在使用user3204845的帖子来更新我的代码。为了将表格打印到屏幕上,我使用了print命令。但是以这种方式我只收到了0069b568。因此,我的想法是使用for循环。但是这行不通。有人可以给我提示如何在Lua中访问表格中的条目吗?这是我的代码:
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_x, coordinate_y, coordinate_z = line:match("%s*(.-),%s*(.-),%s*(.-)")
coordinates[#coordinates+1] = { coordinate_x = coordinate_x, coordinate_y = coordinate_y, coordinate_z = coordinate_z }
end
file:close()
return coordinates
end
os.execute(“OpenGLM_3.exe -slicesize 3 -model cube_2.stl -ascii - eulerangles 0 0 0”)
local coordinates = read_file(“ data.csv”)
for line in coordinates
print(coordinates[line])
end
return 0;
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可以使用
string.format来美观地输出你的值:local coordinates = read_file("data.csv") for _, coordinate in ipairs(coordinates) do -- 使用 pairs 或 ipairs 遍历表格 print(("X: %s, Y: %s, Z: %s"):format(coordinate.coordinate_x, coordinate.coordinate_y, coordinate.coordinate_z)) end%s是字符串值的占位符:第一个%s会被替换为coordinates[line].coordinate_x中的值,第二个会被替换为coordinates[line].coordinate_y,以此类推。ipairs用于按照索引(1、2、3、...)遍历表格,而pairs则使用“自然”顺序,这里并没有指定逻辑 ;)但是,由于我猜想你将想要对这些值进行更多操作,而不仅仅是将它们输出,所以你可能要考虑将它们存储为数字;请修改你的脚本如下:
local function read_file(path) local coordinates = {} for line in io.lines(path) do local coordinate_x, coordinate_y, coordinate_z = line:match("%s*(.-),%s*(.-),%s*(.-)") coordinates[#coordinates+1] = { coordinate_x = tonumber(coordinate_x), coordinate_y = tonumber(coordinate_y), coordinate_z = tonumber(coordinate_z) } end return coordinates end现在,你可以对这些值执行数学运算了。这也允许你更好地控制输出:例如,在上面的格式表达式中用
%.2f替换%s,总是显示数字的两位小数。