Как лучше реализовать проверку по таблице ini?

Pashyka

Участник
Автор темы
220
17
Версия MoonLoader
.026-beta
Добрый день, хотел реализовать более точную и небаганную проверку по ini файлу.
Может кто-то поможет советом, по оптимизации кодика)
На данный момент у меня такой код поиска.
Lua:
for i = 1, #AdsIni.Ads do
    if AdsIni.Ads[i]:match("(.*)&.*$") == u8(textad) then
        correctad = AdsIni.Ads[i]:match(".*&(.*)$")
        Buffers.adtext.v = correctad
        notad = false
        sampSendDialogResponse(557, 1, 0, u8:decode(Buffers.adtext.v))
        dialogopen = false
        adred.v = false
        break
    elseif not notad then
        notad = true
    end
end
if imgui.Button(u8"Скопировать объявление", imgui.ImVec2(-0.1, 0)) then
    Buffers.adtext.v = u8(textad)
end
if imgui.Button(u8'Отравить', imgui.ImVec2(219, 0)) or wasKeyPressed(VK_RETURN) then
    if notad then
        table.insert(AdsIni.Ads, u8(textad) .. "&" .. Buffers.adtext.v)
        inicfg.save(AdsIni, "Ads.ini")
        notad = false
    end
    sampSendDialogResponse(557, 1, 0, u8:decode(Buffers.adtext.v))
    adred.v = false
    dialogopen = false
    Buffers.adtext.v = ""
end
imgui.SameLine()
if imgui.Button(u8'Отклонить', imgui.ImVec2(219, 0)) then
    sampSendDialogResponse(557, 0, 0, u8:decode(Buffers.adtext.v))
    adred.v = false
    dialogopen = false
end

Понимаю, сделано максимально через жопу, но как я не пытался скрипт или крашит или появляются больше ошибок)

Таблица ini такого формата:

INI:
[Ads]
1=Куплю а/м Lamborghini Aventador&Куплю а/м марки Lamborgini Aventador. Бюджет: свободный
2=Набор в рифу на 8ранг&Идет собеседование в БК Рифа на 8-ю майку. Ждем на районе
 
Решение
Я искал по json но вообще никак не выходит, не знаю что там за проблемы, нужен поиск по первому значению до знака &
Lua:
function string:split(sep, reallen)
   local result = {}

   local len = reallen or #sep

   local substring_start_index = 1

   for i = 1, #self do
      if self:sub(i, i + len):match('^' .. sep) then
         local substr = self:sub(substring_start_index, i - 1)
         if #substr > 0 then
            table.insert(result, substr)
         end
         substring_start_index = i + len
      end
   end

   local last_substr = self:sub(substring_start_index, #self)
   if #last_substr > 0 then
      table.insert(result, last_substr)
   end

   return result
end

-- где тебе надо разделить по &
local splited =...

RedHolms

Известный
Проверенный
617
360
Добрый день, хотел реализовать более точную и небаганную проверку по ini файлу.
Может кто-то поможет советом, по оптимизации кодика)
На данный момент у меня такой код поиска.
Lua:
for i = 1, #AdsIni.Ads do
    if AdsIni.Ads[i]:match("(.*)&.*$") == u8(textad) then
        correctad = AdsIni.Ads[i]:match(".*&(.*)$")
        Buffers.adtext.v = correctad
        notad = false
        sampSendDialogResponse(557, 1, 0, u8:decode(Buffers.adtext.v))
        dialogopen = false
        adred.v = false
        break
    elseif not notad then
        notad = true
    end
end
if imgui.Button(u8"Скопировать объявление", imgui.ImVec2(-0.1, 0)) then
    Buffers.adtext.v = u8(textad)
end
if imgui.Button(u8'Отравить', imgui.ImVec2(219, 0)) or wasKeyPressed(VK_RETURN) then
    if notad then
        table.insert(AdsIni.Ads, u8(textad) .. "&" .. Buffers.adtext.v)
        inicfg.save(AdsIni, "Ads.ini")
        notad = false
    end
    sampSendDialogResponse(557, 1, 0, u8:decode(Buffers.adtext.v))
    adred.v = false
    dialogopen = false
    Buffers.adtext.v = ""
end
imgui.SameLine()
if imgui.Button(u8'Отклонить', imgui.ImVec2(219, 0)) then
    sampSendDialogResponse(557, 0, 0, u8:decode(Buffers.adtext.v))
    adred.v = false
    dialogopen = false
end

Понимаю, сделано максимально через жопу, но как я не пытался скрипт или крашит или появляются больше ошибок)

Таблица ini такого формата:

INI:
[Ads]
1=Куплю а/м Lamborghini Aventador&Куплю а/м марки Lamborgini Aventador. Бюджет: свободный
2=Набор в рифу на 8ранг&Идет собеседование в БК Рифа на 8-ю майку. Ждем на районе
не совсем понял, что именно тебе нужно проверять?

offtop: ini не слишком подходит для списков, рациональнее использовать json
 
  • Нравится
Реакции: Pashyka и qdIbp

Pashyka

Участник
Автор темы
220
17
не совсем понял, что именно тебе нужно проверять?

offtop: ini не слишком подходит для списков, рациональнее использовать json
Я искал по json но вообще никак не выходит, не знаю что там за проблемы, нужен поиск по первому значению до знака &
 

RedHolms

Известный
Проверенный
617
360
Я искал по json но вообще никак не выходит, не знаю что там за проблемы, нужен поиск по первому значению до знака &
Lua:
function string:split(sep, reallen)
   local result = {}

   local len = reallen or #sep

   local substring_start_index = 1

   for i = 1, #self do
      if self:sub(i, i + len):match('^' .. sep) then
         local substr = self:sub(substring_start_index, i - 1)
         if #substr > 0 then
            table.insert(result, substr)
         end
         substring_start_index = i + len
      end
   end

   local last_substr = self:sub(substring_start_index, #self)
   if #last_substr > 0 then
      table.insert(result, last_substr)
   end

   return result
end

-- где тебе надо разделить по &
local splited = text:split('&')
local before = splited[1]
local after = splited[2]
 
  • Нравится
Реакции: Pashyka

Pashyka

Участник
Автор темы
220
17
Lua:
function string:split(sep, reallen)
   local result = {}

   local len = reallen or #sep

   local substring_start_index = 1

   for i = 1, #self do
      if self:sub(i, i + len):match('^' .. sep) then
         local substr = self:sub(substring_start_index, i - 1)
         if #substr > 0 then
            table.insert(result, substr)
         end
         substring_start_index = i + len
      end
   end

   local last_substr = self:sub(substring_start_index, #self)
   if #last_substr > 0 then
      table.insert(result, last_substr)
   end

   return result
end

-- где тебе надо разделить по &
local splited = text:split('&')
local before = splited[1]
local after = splited[2]

А можешь, пожалуйста, комментарии дать к строкам функции, и ещё как это использовать если мне надо сравнить значения из ини таблицы к примеру с значением которое я хукнул с диалога игры?
Как я понял последние строчки как раз таки разделяют строку на 2, и можно брать оттуда значения
 

RedHolms

Известный
Проверенный
617
360
Как я понял последние строчки как раз таки разделяют строку на 2, и можно брать оттуда значения
Да

Я надеялся, что ты поймёшь английские слова "before" и "after" (до и после знака "&") :)
 
  • Нравится
Реакции: Pashyka

Pashyka

Участник
Автор темы
220
17
Lua:
function string:split(sep, reallen)
   local result = {}

   local len = reallen or #sep

   local substring_start_index = 1

   for i = 1, #self do
      if self:sub(i, i + len):match('^' .. sep) then
         local substr = self:sub(substring_start_index, i - 1)
         if #substr > 0 then
            table.insert(result, substr)
         end
         substring_start_index = i + len
      end
   end

   local last_substr = self:sub(substring_start_index, #self)
   if #last_substr > 0 then
      table.insert(result, last_substr)
   end

   return result
end

-- где тебе надо разделить по &
local splited = text:split('&')
local before = splited[1]
local after = splited[2]
Или функция там ничего изменять вообще не надо? Строки можно сравнивать уже по последним 3 строкам кода?
 

Pashyka

Участник
Автор темы
220
17
Как я понимаю ты просто сначала написал функцию Сплита, а потом в конце показал как ее юзать, но я вот хотел бы разобраться какта функция работает ) можешь источники покидать или коменты написать какие нить)?

Функцию string:split в любую часть кода

В месте, где тебе надо разделить строку по "&", юзаешь последние 3 строки
Понял, спасибо большое)))
Попробую как робит, как я понял это и для json можно юзануть
 
Последнее редактирование:

RedHolms

Известный
Проверенный
617
360
Как я понимаю ты просто сначала написал функцию Сплита, а потом в конце показал как ее юзать, но я вот хотел бы разобраться какта функция работает ) можешь источники покидать или коменты написать какие нить)?


Понял, спасибо большое)))
Попробую как робит, как я понял это и для json можно юзануть
Функцию сплита писал сам, так что источников нету
Для json'а в муне есть встроенные функции jsonEncode и jsonDecode
 
  • Нравится
Реакции: Pashyka

Pashyka

Участник
Автор темы
220
17
Функцию сплита писал сам, так что источников нету
Для json'а в муне есть встроенные функции jsonEncode и jsonDecode

Понял, хорошо, спасибо ещё раз)
Я конечно посмотрю про JSON ещё раз, но у меня там с сохранением и записью ошибки какие-то и не могу понять какие были