2015-02-19 3 views
1

Я пытаюсь записать несколько строк в файл в Lua, но я не понимаю, как это сделать. Я попытался это:Запись нескольких строк в файл в Lua

local category = io.open("/usr/home/game/share/locale/germany/category.txt", "w") 
category:write(mysql_query("USE account; SELECT DISTINCT itemshop_categories.category AS a, itemshop_categories.id AS b FROM itemshop INNER JOIN itemshop_categories ON itemshop.category_id = itemshop_categories.id ORDER BY itemshop.category_id ASC;")) 
category:close() 

mysql_query дает мне таблицу, как этот

{ 
{"1_1", "1_2"}, 
{"2_1", "2_2"}, 
{"3_1", "3_2"} 
} 

поэтому я хочу, чтобы написать это в .txt файл, но он не работает. И если я заставить его работать, я буду в состоянии прочитать этот файл, как это:

local category = io.open("/usr/home/game/share/locale/germany/category.txt", "r") 
category:read()[2][1] 
category:close() 

, чтобы получить «2_1»?

ответ

1

Вы должны пройти таблицу, возвращаемую mysql_query и записи его содержимого вручную:

for k,v in ipairs(mysql_query("USE account; SELECT DISTINCT itemshop_categories.category AS a, itemshop_categories.id AS b FROM itemshop INNER JOIN itemshop_categories ON itemshop.category_id = itemshop_categories.id ORDER BY itemshop.category_id ASC;")) do 
category:write(k,"\t",v,"\n") 
end 

Чтобы прочитать его обратно, вы читаете файл строка за строкой (возможно, с помощью io.lines), разделить каждую строку на две полей и обрабатывать поля по желанию.

1

Вы не можете напрямую написать таблицу в файл. Вы должны сериализовать его. Если вы правильно сериализуете его, вы можете просто загрузить файл обратно как код lua, чтобы получить идентичную таблицу в результате.

Написание простого сериализатора таблицы не является сложным. Написание надежного является более сложным. К счастью, прекрасные люди на wiki lua-users.org написали ряд таких механизмов сериализации (различного качества и поддержки функций).

Найдите тот, который подходит для ваших целей. http://lua-users.org/wiki/TableSerialization

+0

спасибо, я тоже нашел это. Я реализовал функцию SaveTableToFile для своей библиотеки и попытался получить информацию о ней так: say (table.load ("/ usr/home/game/share/locale/germany/quest/Ingame_Itemshop/category.lua"). a [1]) (скажем, как печать) , но он не работает ... –

+0

Как это не работает? Что такое '.a'? Ваш пример не имел именованного ключа. Что вы получаете от 'table.load'? Что в 'category.lua'? –

+0

это была простая проблема ... я забыл ввести новые имена функций в список квест_функций, который необходим для их использования. теперь он отлично работает. Спасибо за всю вашу помощь :) –