Работа со всеми конфигами одновременно

UBP

Известный
Автор темы
329
168
Версия MoonLoader
.026-beta
Написал создание форм в виде отдельных INI файлов.
каким образом считывать информацию сразу из всех имеющихся INI и подгрупп?
Пример: В тексте не найдено совпадение с формой 1 и он начинает искать во всех формах по очереди пока не найден совпадение .
Не хватает навыков это реализовать. Жду помощи.



Функция создания профиля.
Lua:
function createProfile(param)
    inicfg.save({
        form = {
        form = im_buffer1.v
    
        },
        answer = {
        ans = im_buffer2.v
        }

    }, '..\\resource\\helper\\version\\1\\'..param)
end

up

up
 

Вложения

  • sa-mp-101.png
    sa-mp-101.png
    348 KB · Просмотры: 19
Последнее редактирование:
Решение
Не совсем понял, что тебе надо, но вроде то:
Lua:
local inicfg = require 'inicfg'

local profiles = {}
local DefaultProfileData = {
    -- Profile data
}

function string.split(self, sep)
    if sep == nil then return str end
    if type(self) ~= "string" then self = tostring(self) end

    local t={}
    for str in string.gmatch(self, "([^"..sep.."]+)") do
        table.insert(t, str)
    end
    return t
end

function table.isValueIn(self, value)
    for _, v in pairs(self) do
        if type(v) == 'table' then
            if table.isValueIn(v, value) then return true end
        end
        if v == value then return true end
    end
    return false
end

function createProfile(param)
    local profile = DefaultProfileData...

UBP

Известный
Автор темы
329
168
Написал создание форм в виде отдельных INI файлов.
каким образом считывать информацию сразу из всех имеющихся INI и подгрупп?
Пример: В тексте не найдено совпадение с формой 1 и он начинает искать во всех формах по очереди пока не найден совпадение .
Не хватает навыков это реализовать. Жду помощи.


Функция создания профиля.
Lua:
function createProfile(param)
    inicfg.save({
        form = {
        form = im_buffer1.v
   
        },
        answer = {
        ans = im_buffer2.v
        }

    }, '..\\resource\\helper\\version\\1\\'..param)
end

up

up
up
 

UBP

Известный
Автор темы
329
168
вообще вопрос не понятен
что искать, зачем искать, какие профили
Создается профиль, в нем записаны значения. Далее создается второй, третий и т.д профиль.
Теперь нужно искать в каждом из этом профиле совпадение с заданым значением.
К примеру, нужно найти значение form > Da
Если в первом профиле оно не нашлось, оно ищет в следующем профиле. И так далее
 

UBP

Известный
Автор темы
329
168
up
Создается профиль, в нем записаны значения. Далее создается второй, третий и т.д профиль.
Теперь нужно искать в каждом из этом профиле совпадение с заданым значением.
К примеру, нужно найти значение form > Da
Если в первом профиле оно не нашлось, оно ищет в следующем профиле. И так далее
up

up
 
Последнее редактирование:

RedHolms

Известный
Проверенный
617
360
Не совсем понял, что тебе надо, но вроде то:
Lua:
local inicfg = require 'inicfg'

local profiles = {}
local DefaultProfileData = {
    -- Profile data
}

function string.split(self, sep)
    if sep == nil then return str end
    if type(self) ~= "string" then self = tostring(self) end

    local t={}
    for str in string.gmatch(self, "([^"..sep.."]+)") do
        table.insert(t, str)
    end
    return t
end

function table.isValueIn(self, value)
    for _, v in pairs(self) do
        if type(v) == 'table' then
            if table.isValueIn(v, value) then return true end
        end
        if v == value then return true end
    end
    return false
end

function createProfile(param)
    local profile = DefaultProfileData
    table.insert(profiles, profile)
end

function findValueInProfiles(pathToValue, value)
    for id, profile in pairs(profiles) do
        local v = profile
        for _, key in pairs(pathToValue:split('%.')) do
            v = v[key]
        end
        if v == value then return id end
    end
    return nil
end

function onScriptTerminate(script, quitGame)
    if script == thisScript() then
        for i, profile in ipairs(profiles) do
            inicfg.save(profile, getWorkingDirectory()..'\\PATH\\profile_' .. (i) .. '.ini')
        end
    end
end

Загрузку профилей из файлов будь добр напиши сам, надо же опыт получать :3
(если честно, мне просто было лень)

Короткий гайд по коду
Все профили сохраняются в переменную profiles, с определенным номером
Переменная DefaultProfileData - стандартный профиль
Так-же замени слово PATH на путь к папке с профилями

Дабы найти, в какой профили лежит нужное тебе значение, используй функцию findValueInProfiles
Первым аргументом путь до значения в формате обычного обращения к таблицам, т.е:
findValueInProfiles("HEADER.FIRST_KEY.ANOTHER_KEY.END_VALUE")
Вторым аргументом передаётся значение, которое ищем
Если значение было найдено, возвращается ключ профиля в таблица profiles
Если не найдено, возвращается nil
 

UBP

Известный
Автор темы
329
168
Спасибо огромное.
Не совсем понял, что тебе надо, но вроде то:
Lua:
local inicfg = require 'inicfg'

local profiles = {}
local DefaultProfileData = {
    -- Profile data
}

function string.split(self, sep)
    if sep == nil then return str end
    if type(self) ~= "string" then self = tostring(self) end

    local t={}
    for str in string.gmatch(self, "([^"..sep.."]+)") do
        table.insert(t, str)
    end
    return t
end

function table.isValueIn(self, value)
    for _, v in pairs(self) do
        if type(v) == 'table' then
            if table.isValueIn(v, value) then return true end
        end
        if v == value then return true end
    end
    return false
end

function createProfile(param)
    local profile = DefaultProfileData
    table.insert(profiles, profile)
end

function findValueInProfiles(pathToValue, value)
    for id, profile in pairs(profiles) do
        local v = profile
        for _, key in pairs(pathToValue:split('%.')) do
            v = v[key]
        end
        if v == value then return id end
    end
    return nil
end

function onScriptTerminate(script, quitGame)
    if script == thisScript() then
        for i, profile in ipairs(profiles) do
            inicfg.save(profile, getWorkingDirectory()..'\\PATH\\profile_' .. (i) .. '.ini')
        end
    end
end

Загрузку профилей из файлов будь добр напиши сам, надо же опыт получать :3
(если честно, мне просто было лень)

Короткий гайд по коду
Все профили сохраняются в переменную profiles, с определенным номером
Переменная DefaultProfileData - стандартный профиль
Так-же замени слово PATH на путь к папке с профилями

Дабы найти, в какой профили лежит нужное тебе значение, используй функцию findValueInProfiles
Первым аргументом путь до значения в формате обычного обращения к таблицам, т.е:
findValueInProfiles("HEADER.FIRST_KEY.ANOTHER_KEY.END_VALUE")
Вторым аргументом передаётся значение, которое ищем
Если значение было найдено, возвращается ключ профиля в таблица profiles
Если не найдено, возвращается nil

Вопрос закрыт.
 
Последнее редактирование: