Вывод таблицы

Страницы: 1
RSS
Вывод таблицы
 
Здравствуйте. Возможен ли вывод двумерной таблицы(двумерного массива) LUA в файл в виде таблицы(обычной)? Если да, то как?
 
Можете привести при мер, что должно в файле содержаться? не понятно
 
Цитата
swerg написал:
Можете привести при мер, что должно в файле содержаться? не понятно
t={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
Вид в файле:
1  2    3    4
5  6    7    8
9  10  11  12
Ну и нулевые значения, чтоб тоже записывались либо как nil, либо "пустое место".
 
Код
t={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

local f = io.open("myfile.log", "w+");
for _,line in ipairs(t) do
    for _,item in ipairs(line) do
        f:write(tostring(item), ' ');
    end
    f:write('\n');
end
f:close();
 
лучше, конечно, файл открывать так (с указанием папки скрипта):
Код
local f = io.open(getScriptPath().."\\myfile.log", "w+");
 
а если надо добавлять в конец файла, то вместо
w+ поставить a+
 
Цитата
Вячеслав написал:
local f = io.open("myfile.log", "w+");
for _,line in ipairs(t) do
   for _,item in ipairs(line) do
       f:write(tostring(item), ' ');
   end
   f:write('\n');
end
f:close();
Спасибо! Все именно так, как надо. Но есть одно "НО".
Если мы имеем массив вида:
t={{1,2,3,4}, {5, nil, nil, 6}}, то во вторую строку вписывается только первое число. Либо, если во второй строке массива есть только 4-ый элемент, то строка остается пустой. Получается, что после значения nil все последующие значения "затираются". А моя таблица подразумевает наличие nil значений.
 
Цитата
Вячеслав написал:
Код
  t = {{ 1 , 2 , 3 , 4 },{ 5 , 6 , 7 , 8 },{ 9 , 10 , 11 , 12 }};

 local  f  =   io.open ( "myfile.log" ,  "w+" );
 for  _,line  in  ipairs(t)  do 
     for  _,item  in  ipairs(line)  do 
        f:write(tostring(item),  ' ' );
     end 
    f:write( '\n' );
 end 
f:close();
  
У меня еще один вопрос: Возможен ли вывод массива в файл Excel?
 
для этого Вам надо ознакомиться с форматом файлов Excel и написать программу.
--------------------------------------------
все в этом мире возможно,
вопрос лишь в том,
сколько на это надо .... и есть ли у Вас столько.
 
Всем спасибо за помощь!
 
Игорь Князьков,
Не рекомендую использовать nil, однако, если кол-во элементов в каждой из строк фиксировано, то это возможно:
Код
t={{1,2,3,4},{5,nil,nil,8},{9,10,11,12}};

columns = 4;
rows = 3;

local f = io.open("myfile.log", "w+");
local temp = {};
for y = 1,rows do
   local line = t[y];
    for x = 1,columns do
       temp[x] = tostring(line[x]);
    end
    f:write(table.concat(temp, ' '), '\n');
end
f:close();
Для CSV замените ' ' в сткоке f:write... на ',' . Для обработки полей с запятыми в .csv вам нужно будет использовать более сложный алгоритм для их экранизации.
 
Цитата
Вячеслав написал:
Игорь Князьков  ,
Не рекомендую использовать nil, однако, если кол-во элементов в каждой из строк фиксировано, то это возможно:
Код
  t = {{ 1 , 2 , 3 , 4 },{ 5 , nil , nil , 8 },{ 9 , 10 , 11 , 12 }};

columns  =   4 ;
rows  =   3 ;

 local  f  =   io.open ( "myfile.log" ,  "w+" );
 local  temp  =  {};
 for  y  =   1 ,rows  do 
    local  line  =  t[y];
     for  x  =   1 ,columns  do 
       temp[x]  =  tostring(line[x]);
     end 
    f:write( table.concat (temp,  ' ' ),  '\n' );
 end 
f:close();
  
Для CSV замените ' ' в сткоке f:write... на ',' . Для обработки полей с запятыми в .csv вам нужно будет использовать более сложный алгоритм для их экранизации.
Спасибо.
 
Цитата
Игорь Князьков написал:
У меня еще один вопрос: Возможен ли вывод массива в файл Excel?
Можно через LuaCom - http://stackoverflow.com/questions/1565838/using-lua-for-working-with-excel
Код
require('luacom')
excel = luacom.CreateObject("Excel.Application")
excel.Visible = true
wb = excel.Workbooks:Add()
ws = wb.Worksheets(1)

for i=1, 20 do
    ws.Cells(i,1).Value2 = i
end
Страницы: 1
Читают тему
Наверх