Парс

$Mr.R1ch$

Активный
Автор темы
337
51
Версия MoonLoader
Другое
Возникла такая проблема, я парсил imgui InputText с нужными значениями ini, и когда попытался парсить к нему текст, то происходит вот что (на скринах). Как можно это исправить? Должно быть 20 InputText, а из за перса получается 200 вроде

Код:

Lua:
local channel = setmetatable({"channel1", "channel2", "channel3", "channel4", "channel5", "channel6", "channel7", "channel8", "channel9", "channel10", "channel11",  "channel12",  "channel13",  "channel14",   "channel15",   "channel16",  "channel17",   "channel18",  "channel19",   "channel20"},
{
    __index = function(self, key)
        if not ini.radio[key] then
            ini.radio[key] = ""
        end
        self[key] = imgui.new.char[256](u8(ini.radio[key]))
        return self[key]
    end
})


for idx, value in ipairs(channel) do
    for channels = 1, 20 do
        imgui.Text(u8('Канал связи №'..channels))
         if imgui.InputText("##channelDepartamemt" .. idx, channel[value], 255) then
            ini.radio[value] = u8:decode(ffi.string(channel[value]))
            inicfg.save(ini, "Test.ini")
         end
      end
       imgui.NewLine()
end
 

Вложения

  • IMG_20240712_122428.jpg
    IMG_20240712_122428.jpg
    99.6 KB · Просмотры: 11
  • IMG_20240712_122506.jpg
    IMG_20240712_122506.jpg
    109 KB · Просмотры: 13

wojciech?

Известный
Проверенный
390
288
и как тогда мне текст парсить?
что меняется то?
Lua:
for idx, value in ipairs(channel) do
  imgui.Text(u8('Канал связи №' .. idx))
  if imgui.InputText("##channelDepartamemt" .. idx, channel[value], 255) then
    ini.radio[value] = u8:decode(ffi.string(channel[value]))
    inicfg.save(ini, "Test.ini")
  end
  imgui.NewLine()
end
 
  • Нравится
Реакции: $Mr.R1ch$

$Mr.R1ch$

Активный
Автор темы
337
51
что меняется то?
Lua:
for idx, value in ipairs(channel) do
  imgui.Text(u8('Канал связи №' .. idx))
  if imgui.InputText("##channelDepartamemt" .. idx, channel[value], 255) then
    ini.radio[value] = u8:decode(ffi.string(channel[value]))
    inicfg.save(ini, "Test.ini")
  end
  imgui.NewLine()
end
если бы я не забыл, что idx имеет числовую структуру, то не бился головой об стену...

что меняется то?
Lua:
for idx, value in ipairs(channel) do
  imgui.Text(u8('Канал связи №' .. idx))
  if imgui.InputText("##channelDepartamemt" .. idx, channel[value], 255) then
    ini.radio[value] = u8:decode(ffi.string(channel[value]))
    inicfg.save(ini, "Test.ini")
  end
  imgui.NewLine()
end
можно ли как то изменить idx? к примеру надо чтобы цифры шли не от 1, а с 10
 
Последнее редактирование:

wojciech?

Известный
Проверенный
390
288
можно ли как то изменить idx? к примеру надо чтобы цифры шли не от 1, а с 10
изменить нельзя, если тебе нужны другие диапазоны, то либо:
Lua:
for idx = 10, 20 do
    local value = channel[idx]
    -- code
end
либо писать кастомный итератор
 
  • Нравится
Реакции: $Mr.R1ch$

$Mr.R1ch$

Активный
Автор темы
337
51
изменить нельзя, если тебе нужны другие диапазоны, то либо:
Lua:
for idx = 10, 20 do
    local value = channel[idx]
    -- code
end
либо писать кастомный итератор
пока тут делал диапазон, не понял как с помощью этой функции парсить мне таблицу, по скольку у меня есть поля ввода, которые сохраняют значения, но вот при изменении диапазона значения не сохраняются, поэтому надо парсить мне через таблицу. Как это сделать?
 

wojciech?

Известный
Проверенный
390
288
пока тут делал диапазон, не понял как с помощью этой функции парсить мне таблицу, по скольку у меня есть поля ввода, которые сохраняют значения, но вот при изменении диапазона значения не сохраняются, поэтому надо парсить мне через таблицу. Как это сделать?
по сути тоже самое, но с итератором
Lua:
local function cpairs(t, s, f)
    s, f = s or 1, f or #t
    return function()
        local v = t[s]
        if v ~= nil and s <= f then
            s = s + 1
            return s - 1, v
        end
    end
end

for i, v in cpairs({ 5, 4, 3, 2, 1 }, 2, 4) do -- 2, 4 диапазон для таблицы
    print(i, v)
    --[[
        2    4
        3    3
        4    2
    ]]
end
 

imring

Ride the Lightning
Всефорумный модератор
2,366
2,556

$Mr.R1ch$

Активный
Автор темы
337
51
покажи как ты меняешь диапазон
Lua:
for idx = 11, 20 do
         local value = channeldouble[idx]
         imgui.Text(u8('Канал связи №'..idx))
         if imgui.InputText("##channelDepartamemt2" .. idx, channeldouble[value], 255) then
            ini.radio[value] = u8:decode(ffi.string(channeldouble[value]))
            inicfg.save(ini, "MVDHelper.ini")
         end
         imgui.Spacing()
      end
   end

по сути тоже самое, но с итератором
Lua:
local function cpairs(t, s, f)
    s, f = s or 1, f or #t
    return function()
        local v = t[s]
        if v ~= nil and s <= f then
            s = s + 1
            return s - 1, v
        end
    end
end

for i, v in cpairs({ 5, 4, 3, 2, 1 }, 2, 4) do -- 2, 4 диапазон для таблицы
    print(i, v)
    --[[
        2    4
        3    3
        4    2
    ]]
end
попробовал я сделать через итератор, и ничего... Оно не сохраняет опять значения, но всё работает через обычный Парс, а может у меня руки кривые.

код:
Lua:
 for i, v in cpairs(channeldouble, 11, 20) do
     imgui.Text(u8('Канал связи №'..i))
         if imgui.InputText("##channelDepartamemt2" .. i, channeldouble[v], 255) then
            ini.radio[v] = u8:decode(ffi.string(channeldouble[v]))
            inicfg.save(ini, "MVDHelper.ini")
         end
      end
 
Последнее редактирование:

$Mr.R1ch$

Активный
Автор темы
337
51
Lua:
for idx = 11, 20 do
         local value = channeldouble[idx]
         imgui.Text(u8('Канал связи №'..idx))
         if imgui.InputText("##channelDepartamemt2" .. idx, channeldouble[value], 255) then
            ini.radio[value] = u8:decode(ffi.string(channeldouble[value]))
            inicfg.save(ini, "MVDHelper.ini")
         end
         imgui.Spacing()
      end
   end


попробовал я сделать через итератор, и ничего... Оно не сохраняет опять значения, но всё работает через обычный Парс, а может у меня руки кривые.

код:
Lua:
 for i, v in cpairs(channeldouble, 11, 20) do
     imgui.Text(u8('Канал связи №'..i))
         if imgui.InputText("##channelDepartamemt2" .. i, channeldouble[v], 255) then
            ini.radio[v] = u8:decode(ffi.string(channeldouble[v]))
            inicfg.save(ini, "MVDHelper.ini")
         end
      end
@wojciech?