Как выделить переменные с текста

lionex

Потрачен
Автор темы
33
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Версия MoonLoader
.026-beta
У меня есть текст:
Outlaws
Общий онлайн: 16
ID Ранг Ник

39 1 Konstantin_Trezzini
89 3 Eugene_Tolk
168 1 Palma_Presley
265 4 Lucifer_Santana
311 1 Alexei_Duran
375 1 Papa_Swarovski
415 5 Happy_Holiday [AFK: 30:45]
536 5 Rodrigo_Disparo
661 4 Thomas_DeMitchell [AFK: 01:13]
674 2 Eiton_Targaryen
676 1 Don_Carleone
819 6 Jaguar_Gutierrez
873 1 Konstantin_Renoir
919 4 Vicente_Gutierrez
963 6 Ricardo_Cordero
974 2 Oleg_Mazepa

Как мне выделить id, rank, nick?
 

lionex

Потрачен
Автор темы
33
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

lionex

Потрачен
Автор темы
33
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
local render = require 'lib.render'
local myrender = render.create()
local imgui = require 'imgui'
local sampev = require "lib.samp.events"

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local upd = false

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('bfind', function() sampSendChat("/bfind") upd = true end)
    while true do
        wait(5000)
        upd = true sampSendChat("/bfind")
    end
end

function sampev.onShowDialog(dialogId, style, tittle, b1, b2, text)
    if text:find("Outlaws") and dialogId == 1 then

        for one in text:gmatch("%d+ %d+ %S+") do
            local id, rang, name = one:match("(%d+) (%d+) (%S+)")
            print(id, rang, name)
        end

        if upd then
            myrender.text("[" .. id .. "]" .. name .. " - " .. rang)
                    .font('Arial')
                    .size(10)
                    .pos({x = 1100, y = 300})
                    .flags('Bold shadow')
                    .color('red')
                    .opacity(100)
                    .show()
            upd = false
            sampSendDialogResponse(dialogId, 1, 0, '')
            return false
        end
    end
end
К сожалению, я не экстрасенс, можно взглянуть на код, который у тебя получился?
Насколько я рукожоп? xD
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,136
Lua:
local render = require 'lib.render'
local myrender = render.create()
local imgui = require 'imgui'
local sampev = require "lib.samp.events"

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local upd = false

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('bfind', function() sampSendChat("/bfind") upd = true end)
    while true do
        wait(5000)
        upd = true sampSendChat("/bfind")
    end
end

function sampev.onShowDialog(dialogId, style, tittle, b1, b2, text)
    if text:find("Outlaws") and dialogId == 1 then

        for one in text:gmatch("%d+ %d+ %S+") do
            local id, rang, name = one:match("(%d+) (%d+) (%S+)")
            print(id, rang, name)
        end

        if upd then
            myrender.text("[" .. id .. "]" .. name .. " - " .. rang)
                    .font('Arial')
                    .size(10)
                    .pos({x = 1100, y = 300})
                    .flags('Bold shadow')
                    .color('red')
                    .opacity(100)
                    .show()
            upd = false
            sampSendDialogResponse(dialogId, 1, 0, '')
            return false
        end
    end
end

Насколько я рукожоп? xD
Предполагаю, что между ID, рангом и никнеймом не пробелы, а табуляционный отступы. Попробуй следующий формат кода, если не сработает можешь поиграться с количеством \t в зависимости от того, насколько большие пробелы между параметрами.
Lua:
for one in text:gmatch("%d+\t%d+\t%S+") do
  local id, rang, name = one:match("(%d+)\t(%d+)\t(%S+)")
  print(id, rang, name)
end
 

lionex

Потрачен
Автор темы
33
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Предполагаю, что между ID, рангом и никнеймом не пробелы, а табуляционный отступы. Попробуй следующий формат кода, если не сработает можешь поиграться с количеством \t в зависимости от того, насколько большие пробелы между параметрами.
Lua:
for one in text:gmatch("%d+\t%d+\t%S+") do
  local id, rang, name = one:match("(%d+)\t(%d+)\t(%S+)")
  print(id, rang, name)
end
[19:41:24.320315] (error) bfind.lua: D:\СБОРКА 50К\moonloader\bfind.lua:34: attempt to concatenate global 'id' (a nil value)
stack traceback:
D:\СБОРКА 50К\moonloader\bfind.lua:34: in function 'callback'
D:\СБОРКА 50К\moonloader\lib\samp\events\core.lua:79: in function <D:\СБОРКА 50К\moonloader\lib\samp\events\core.lua:53>
[19:41:24.322316] (error) bfind.lua: Script died due to an error. (01C715DC)
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,136
[19:41:24.320315] (error) bfind.lua: D:\СБОРКА 50К\moonloader\bfind.lua:34: attempt to concatenate global 'id' (a nil value)
stack traceback:
D:\СБОРКА 50К\moonloader\bfind.lua:34: in function 'callback'
D:\СБОРКА 50К\moonloader\lib\samp\events\core.lua:79: in function <D:\СБОРКА 50К\moonloader\lib\samp\events\core.lua:53>
[19:41:24.322316] (error) bfind.lua: Script died due to an error. (01C715DC)
Могу предложить только скинуть текст в оригинале, чтобы я понял какое там разделение. Можешь сделать print и потом загрузить сюда moonloader.log
 

lionex

Потрачен
Автор темы
33
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Вложения

  • moonloader.log
    4.6 KB · Просмотры: 4

lionex

Потрачен
Автор темы
33
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Попробуй:
Lua:
for one in text:gmatch("%d+%s+%d+%s+%S+") do
  local id, rang, name = one:match("(%d+)%s+(%d+)%s+(%S+)")
  if id then print(id, rang, name) end
end
В последней строчке все значения nil, не знаешь из-за чего может быть? зачем оно добавляет еще одну строку?
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,136
В последней строчке все значения nil, не знаешь из-за чего может быть? зачем оно добавляет еще одну строку?
Сложно сказать, возможно оно находит совпадение по первому регулярному выражению, но не находит по второму. В любом случае, рекомендую просто оставить проверку и особо не напрягаться насчет этого.