2

I am trying to get it to read from a file x y z coordinates into a 3d array. But it does not seem to be working.

file is located in same folder as the .lua script

-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;
4

1 回答 1

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}}
于 2012-10-15T02:20:56.810 回答