如何正确实现将 Lua 表保存到文件以及如何将文件中的数据读回到表中。不需要超级通用性,没有外部依赖性更好(我将插入到 LuaLaTeX 中)。示例将适合我的示例表tquest
。
尝试了不同的示例,例如: http: //lua-users.org/wiki/SaveTableToFile。
不起作用。文件中有 5 个条目,我有 4 个!也许我做错了什么。
return {
-- Table: {1}
{
{2},
{3},
{4},
{5},
},
-- Table: {2}
{
"{=1}~Коммутативность",
"{=2}~Ассоциативность бинарных операций",
"{=3}~Идемпотентность унарных операций",
"{=4}~Дистрибутивность бинарных операций между бинарными",
"{=5}~Факторизация унарных операций",
["q"]="Какое из свойств \\textbf{реляционной алгебры} представлено далее?\\par \\begin{equation*} \\begin{aligned}U(U(R, S), T) &\\rightarrow U(R, U(S, T)) \\\\ CP(CP(R, S), T) &\\rightarrow CP(R, CP(S, T)) \\\\ J_{F_2}(J_{F_1}(R, S), T)&\\rightarrow J_{F_1}(R, J_{F_2}(S, T)) \\end{aligned} \\end{equation*}",
["a"]=2,
},
-- Table: {3}
{
"{=1}~Свойство стилевого оформления и его значение",
"{=2}~Пространство имен",
"{=3}~Префикс пространства имен",
"{=4}~Название атрибута и его значение",
["q"]="Что должно быть на изображении ниже за знаками вопроса?\\par\\begin{center} \\includegraphics[width=0.7\\linewidth]{xml_v_bd_test_fig_1.pdf}\\end{center}",
["a"]=4,
},
-- Table: {4}
{
"{=1}~Процедура \\textbf{БД}, автоматически вызываемая \\textbf{SQL}~-- сервером при обновлении, удалении или добавлении новой записи в таблицах \\textbf{БД}",
"{=2}~Процедура \\textbf{БД}, вручную вызываемая \\textbf{SQL}~-- сервером при обновлении, удалении или добавлении новой записи в таблицах \\textbf{БД}",
"{=3}~Модуль, написанный на любом языке, который выполняет групповое изменение данных в \\textbf{БД}",
"{=4}~Модуль, написанный на процедурном языке и хранящийся в \\textbf{БД} как метаданные, который можно вызывать из программы",
["q"]="Триггер это \\ldots~?",
["a"]=1,
},
-- Table: {5}
{
"{=1}~xmlns",
"{=2}~xhtml",
"{=3}~xmlds",
"{=4}~xslns",
["q"]="С помощью какого тега в \\textbf{XML} объявляют пространства имен?",
["a"]=1,
},
}
我的例子:
local function createtbl()
tbl=tbl or {}
table.insert(tbl, {q="Какое из свойств \\textbf{реляционной алгебры} представлено далее?\\par \\begin{equation*} \\begin{aligned}U(U(R, S), T) &\\rightarrow U(R, U(S, T)) \\\\ CP(CP(R, S), T) &\\rightarrow CP(R, CP(S, T)) \\\\ J_{F_2}(J_{F_1}(R, S), T)&\\rightarrow J_{F_1}(R, J_{F_2}(S, T)) \\end{aligned} \\end{equation*}",
a=2,
[1]="{=1}~Коммутативность",
[2]="{=2}~Ассоциативность бинарных операций",
[3]="{=3}~Идемпотентность унарных операций",
[4]="{=4}~Дистрибутивность бинарных операций между бинарными",
[5]="{=5}~Факторизация унарных операций"
})
table.insert(tbl, {q="Что должно быть на изображении ниже за знаками вопроса?\\par\\begin{center} \\includegraphics[width=0.7\\linewidth]{xml_v_bd_test_fig_1.pdf}\\end{center}",
a=4,
[1]="{=1}~Свойство стилевого оформления и его значение",
[2]="{=2}~Пространство имен",
[3]="{=3}~Префикс пространства имен",
[4]="{=4}~Название атрибута и его значение"
})
table.insert(tbl, {q="Триггер это \\ldots~?",
a=1,
[1]="{=1}~Процедура \\textbf{БД}, автоматически вызываемая \\textbf{SQL}~-- сервером при обновлении, удалении или добавлении новой записи в таблицах \\textbf{БД}",
[2]="{=2}~Процедура \\textbf{БД}, вручную вызываемая \\textbf{SQL}~-- сервером при обновлении, удалении или добавлении новой записи в таблицах \\textbf{БД}",
[3]="{=3}~Модуль, написанный на любом языке, который выполняет групповое изменение данных в \\textbf{БД}",
[4]="{=4}~Модуль, написанный на процедурном языке и хранящийся в \\textbf{БД} как метаданные, который можно вызывать из программы"
})
table.insert(tbl, {q="С помощью какого тега в \\textbf{XML} объявляют пространства имен?",
a=1,
[1]="{=1}~xmlns",
[2]="{=2}~xhtml",
[3]="{=3}~xmlds",
[4]="{=4}~xslns"
})
return tbl
end
-- функция печати таблицы
local function printall(arr)
local ans = "["
for i,n in ipairs(tbl) do
ans = ans .. n.a .. ","
print("[" .. i .. "] " .. n.q .. "\n")
for j = 1, #n do
local s = " [" .. j .. "] " .. n[j]
print(s)
end
print("\n")
end
ans = ans:sub(1, ans:len()-1) .. "]"
print("answer" .. ans)
end
print ("create table with questions");
local tquest = createtbl();
print ("\n" .. "######################################################");
printall(tquest);
print ("######################################################" .. "\n");
--print ("save table into file");
--table.save(tquest, "tquest.txt");
--print ("load table from file");
--local t2,err = table.load( "tquest.txt" );
--print ("print table t2");
--print ("\n" .. "######################################################");
--printall(t2);
--print ("######################################################" .. "\n");
提前致谢。
好吧,这就是它的工作原理: