Lua таблицу в файл и обратно

Страницы: 1
RSS
Lua таблицу в файл и обратно
 
Преобразование таблицы Lua в строку, запись в файл и загрузка таблицы из файла в скрипт.
Код
function value2text(t,s)  --преобразование таблицы в скрипт
   local s1=""; --новое значение
   local n=string.len(s); local z=string.sub(s,n);
   local m= type(t);
   if m=="string" then
      s1='"'..tostring(t)..'"';  elseif m=="number" then s1=tonumber(t);  elseif t==nil then s1="nil";
   elseif m=="table" then local f;
      for j,v in pairs(t) do
         local x=v;
         if f then s1=s1.."," end  f=1;
         if  type(j)~="number" then    s1=s1..'\n["'..tostring(j)..'"]='; end
         s1=value2text(x,s1);
      end
      if z=='}' then s1='\n{'..s1..'}'; else s1='{'..s1..'}' end
   end
return s..s1;
end

--------------------  это пример вывода и загрузки с распечаткой значений из таблиц
local t2={6,7,8,9}
local t={1,2,3,4,5,"asd",t2}  -- это таблица которую выводим в файл
----------вывод в файл
local fn=p3.."test999.lua"
fLog=io.open(fn,"w"); fLog:write("t1="..value2text(t,"").."\n");fLog:flush()
fLog:close();
-----------ввод из файла
dofile(fn);
----------------прочитали таблицу из файла в таблицу t1
--теперь печатаем из введенной таблицы значения и сравниваем их со значениями в t2 и t
local t3=t1[7]
local s1=t1[6];
print(t1[1],s1,t3[3])

результат:
это содержимое файла test999.lua:
Код
t1={1,2,3,4,5,"asd",{6,7,8,9}}
это печать значений
Код
1   asd   8
 
Гениально, шеф (С). Здесь я увидел, кажется, то же самое, но длиннее:
bot4sale.ru/blog-menu/qlua/300-table-tostring.html
 
Цитата
Serge123 написал:
bot4sale.ru/blog-menu/qlua/300-table-tostring.html
Можешь доказать?
 
Serge123,
За базар отвечаешь?
-------------------
Разуй глаза:
 
Что ты на меня бочку покатил? С Владимир спутал? Я похвалил твой пример.
 
еще вариант преобразования таблицы в скрипт Lua
Код
function t2s(t,s) -- преобразование таблицы в скрипт Lua
   for z,v in pairs(t) do
   if s~="" then s=s.."," end
       if type(z)~="number" then s=s.."["..z.."]=" end
      m=type(v);
      if m=="table" then x=t2s(v,"")
        elseif m=="number" then  x=v;
      else x='"'..v..'"';   end
      s=s..x;
    end
return "{"..s.."}";
end
Страницы: 1
Читают тему
Наверх