【问题标题】:Reading and parsing files with LUA使用 LUA 读取和解析文件
【发布时间】:2012-10-15 10:37:40
【问题描述】:

我试图让它从文件 x y z 坐标中读取到 3d 数组中。但它似乎不起作用。

文件与.lua 脚本位于同一文件夹中

-9649.481 666.4141 117.3444
-9475.624 563.4871 116.0533
-9338.459 432.295 137.4043

function lines_from(file)
  if not file_exists(file) then return {} end
  for line in io.lines(file) do 
    tokens = {};
    itr = 1;
    for token in string.gmatch(line, "[^%s]+") do
        tokens[ itr ] = token;
        itr = itr + 1;
    end

    x = tokens[1];
    y = tokens[2];
    z = tokens[3];
    g_lines_from[g_lines_fromCount] = { x, y, z };
    g_lines_fromCount = g_lines_fromCount + 1;

  end

end

function AddAll()
    for i = 1, g_lines_from, 1 do
        x, y, z = g_lines_from[i];
        ListBoxEntry.Create( g_lbWaypoints, "X: " .. math.floor( x ) .. ", Y: " .. math.floor( y ) .. ", Z: " .. math.floor( z ) );
    end
end

function OnAddWaypointClicked( eventID, button )
    local file = "mine1-75.txt";
    lines_from(file);
    AddAll();
end;

【问题讨论】:

  • 那么会发生什么?你期望得到什么,你实际得到什么?你尝试过自己调试什么?
  • 您的程序可以优化很多

标签: lua


【解决方案1】:

试试下面的功能:

function readwaypoints(filename, numberofwaypoints)
  local file = io.open(filename)
  local waypoints = {}
  for n = 1, numberofwaypoints do
    local x, y, z
    x = file:read('*n')
    y = file:read('*n')
    z = file:read('*n')
    waypoints[#waypoints+1] = {['x'] = x, ['y'] = y, ['z'] = z}
  end
  file:close()
  return waypoints
end

它需要一个文件名和文件中的行数。对于您的示例文件,它应该返回一个像这样的表:

{[1] = {x = -9649.481, y = 666.4141, z = 117.3444},
 [2] = {x = -9475.624, y = 563.4871, z = 116.0533},
 [3] = {x = -9338.459, y = 432.295,  z = 137.4043}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 2023-03-07
    • 2017-01-22
    • 2013-05-27
    • 2016-03-14
    • 1970-01-01
    • 2020-07-13
    • 2013-06-05
    相关资源
    最近更新 更多