При отладке скриптов на LUA часто необходимо вывести данные в файл для последующего анализа результатов.
Приведу текст и исходник модуля для записи данных в такой файл.
Особенность данного скрипта в том, что он пишет в лог файл любые данные, в том числе и разворачивает таблицы:
———————————————
Скрипт на LUA для вывода данных в лог-файл NKLog.lua:
————————
local os=os;
local io=io;
local pairs=pairs;
local type=type;
local print=print;
local tostring=tostring;
local dlog=»./»;
module(«NKLog»)
——————
local nameflog=dlog..»NKLog.txt»
——————
local flog=nil
——————————
local function NKsaveT(flog,tab,x1,x2)
local s1=x1..»>»; local s2=x2..» «;
if type(tab)==»table» then
for idx,t in pairs(tab) do
flog:write( s1..s2..idx..»=»..tostring(t).. «\n»)
if type(tab)==»table» then
NKsaveT(flog,t,s1,s2)
end
end
end
end
——————
function Log(tab,s)
local s1; local s2;
if s==nil then s1=»» else s1=s..»:»; end; s2=»»;
s1=os.date()..» : «..s1;
if flog==nil then flog=io.open(nameflog,»w») end
if type(tab)==»table» then
NKsaveT(flog,tab,s1,s2)
else
flog:write( s1..tostring(tab).. «\n»)
end
flog:flush ()
end
———————————
Данный скрипт необходимо записать в отдельный файл с именем NKLog.lua и поместить в каталог с отлаживаемом скриптом.
—————————————
Тест для лог файла:
require «NKLog»
—————
local x=»функция записывает в лог таблицу»
local y=10
local z={1,2,3,4,5,6}
local w={[«a»]=1,[«b»]=2}
——————
NKLog.Log(x,»x»);
NKLog.Log(y,»y»);
NKLog.Log(z,»z»);
NKLog.Log(w,»w»);
Результат в файле NKLog.txt:
01/25/14 13:04:04 : x:функция записывает в лог таблицу
01/25/14 13:04:04 : y:10
01/25/14 13:04:04 : z:> 1=1
01/25/14 13:04:04 : z:> 2=2
01/25/14 13:04:04 : z:> 3=3
01/25/14 13:04:04 : z:> 4=4
01/25/14 13:04:04 : z:> 5=5
01/25/14 13:04:04 : z:> 6=6
01/25/14 13:04:04 : w:> a=1
01/25/14 13:04:04 : w:> b=2
————————
Исходники можно взять здесь: LUA. Запись в log-файл (2)