Как читать таблицы, написанные в файле на lua

#lua

Вопрос:

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

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

файл1

 itemA = {{"a","b","c"},{"d","e","f"},{"g","h","i"}}
itemB = {{"j","k","l"},{"m","n","o"},{"p","q","r"}}
 

файл2

 itemA = {{"a","b","c"},{"d","e","f"},{"g","h","i"}}
itemC = {{"j","k","l"},{"m","n","o"},{"p","q","r"}} 
 

Чего я хочу, так это чтобы, когда я прочитаю это по строкам, вы получили структуру таблицы, которая в основном

 recipies = {itemA = {{"a","b","c"},{"d","e","f"},{"g","h","i"}}, itemB = {{"j","k","l"},{"m","n","o"},{"p","q","r"}}}
 

Также необходимо проверить идентичный рецепт на случай, если несколько словарей содержат один и тот же рецепт для одного и того же товара

У меня нет большого опыта работы со строками на любом языке, но я не знаю, как удаленно обойти это в Lua.

Комментарии:

1. Кажется, я что-то упустил. В вашем ожидаемом результате, куда вы itemC пошли? Вы просто хотите объединить несколько словарей файлов в один большой, без дубликатов? Можете ли вы изменить формат своих файлов, например, вместо глобального itemA размещения их в таблице, а затем возврата всей таблицы?

2. в основном itemA будет названием определенного предмета, который я хочу создать, например, minecraft:torch или minecraft:crafting_table. Я хочу обнаружить дублирование, потому что каждый файл будет представлять другой мод. итак, ваниль-это базовая игра, computetercraft-это рецепты, добавленные через мод computercraft. ect

3. Вы пытаетесь загрузить его на черепаху? Файл уже в черепахе, и вы просто хотите взять рецепт из файла? как пример turtleCraft(recipes.BoneMeal) ?

4. Ну, я хочу иметь метод, который захватывает весь словарь, но да. Вот к чему я стремлюсь

Ответ №1:

Так что это должно быть довольно хорошим решением. Просто вы просто хотите открыть файл txt и отменить его сериализацию. Это превращает его из строки обратно в таблицу, которую затем можно проиндексировать

При fs.open() этом вы открываете файл с определенной целью. Это "r" говорит о том, что это открыто только для чтения. Вот некоторые из других вариантов, которые можно использовать в зависимости от того, что вы хотите сделать

 -- Open the text file which currently has all of the recipes in a table
local recipes = textutils.unserialize(fs.open("recipes.txt", "r"))

-- We use textutils.unserialize() to change the text from a string to a table

local running = true

-- Setup an infinite loop
while running do
    io.write("Enter a recipe name to craft or type 'EXIT' to exitn")

    -- Getting the user input
    choice = io.read()

    -- If the user types 'EXIT' then stop the program
    if choice == "EXIT" then
        break
    end

    -- Craft the recipe
    turtleCraft(recipe.ItemA)
end
 

Некоторые другие, похоже, говорят о безопасности, но если это используется для компьютерных игр, то на самом деле это вообще не проблема. Используете ли вы хитрую черепаху и команду ремесла или как вы добиваетесь мастерства с помощью стола?

Я также должен добавить, что таблицы будут настроены следующим образом

 {
    itemA = {
        {"a","b","c"},
        {"d","e","f"},
        {"g","h","i"}
    },
    itemB = {
        {"j","k","l"},
        {"m","n","o"},
        {"p","q","r"}
    }
}
 

Конечно, формат не имеет особого значения, но ключевого recipes слова там не было бы.

https://computercraft.info/wiki/Fs.list

Эта ссылка также может оказаться полезной, она демонстрирует способ просмотра каждого файла в каталоге. Однако в настоящее время у меня нет способа проверить это.

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