Замена, поиск, сортировка цифр

Nikitka2281488

Участник
Автор темы
22
3
Привет.
В данный момент пытаюсь заШаблонить все возможные варианты внутриигровых объявлений, которые подают игроки в радиоцентр. Делаю для специфич сервера, Гранд РП, но не суть.
Основная часть готова, но теперь встаёт следующий вопрос: как мне адекватно искать цифры и числа для определения стоимости? Поясню немного, для чего создал тему.
Игроки подают объявки, в них пишут свои букавки и указывают свои цены, но к сожалению - всегда в разных форматах. Например:
1. цена 1кк
2. цена 1.000.000
3. цена 1.000к
4. цена 1000к
5. цена 1000000
И, опять же, это далеко не все варианты написания, которые используют. Помимо цены, в объявлении нередко указывают навигатор, причём тоже всегда по разному:
1. навик 11-111
2. навик 111
3. навик 11 111
4. навик 11,111
И так далее. Сюда ещё добавляем такой момент, что ты никогда не знаешь, что игрок написал раньше: цену или навигатор.
+есть объявы, которые вовсе не требуют навигатора и/или цены.
++есть объявы в которых вовсе не пишут слова: "цена, навигатор", а просто их указывают.
В луа уже пол года лазию, но с поиском чисел всегда была проблема. Пишу данную тему и прошу опытных кодеров адекватную подсказку, или свою грамотную идею, как осуществлять поиск числа и превращать его адекватные данные. А также прошу помочь разобраться с регулярными выражениями и примерами их использования. Заранее спасибо, надеюсь не будет тупых ответов, по типу: иди погугли или нахуй тебе это надо, уже давно есть рабочий автоэдит и всё такое.
 

Aniki

🐰
Администратор
1,225
1,506
Ну я могу помочь только с ценами, вот такой ЕБАНЫЙ ПИЗДЕЦ (других слов у меня нет) разбирал цену в разных написаниях (в автоедите для адванса)
Lua:
            if (string.match(low,"([0-9][0-9%.,%s]*)%s?[krкл][krкл]%s", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?лям", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?млн", 1)) then
                price = 1
                sum = string.match(low,"([0-9][0-9%.,%s]*)%s?[krкл][krкл]%s", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?лям", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?млн", 1)
                if (string.find(sum, "%.")) then
                    pos = string.find(sum,"%.")
                else
                    pos = string.find(sum,"%,")
                end
                sum = string.gsub(sum, " ", "")
                if (not pos) then
                    pos = string.len(sum) + 1
                end
               
                --if (pos)
                --{
                sum = string.sub(sum,1,pos-1) .. string.sub(sum,pos+1)
                btbt = 6 - (string.len(sum) - pos + 1)
                for i = 1, btbt do
                    sum = sum .. 0
                end
                len = (string.len(sum) - 1) / 3
                for i = 1, len do
                    sum = string.sub(sum,1,(string.len(sum) - 3*i - (i - 1))) .. "." .. string.sub(sum, string.len(sum) - 3*i - (i -1) + 1)
                end
                sum = string.gsub(sum, "^[0][0%.]*", '')
                sumstr = sumstr .. (sum .. "$")
                sumstrlen = string.len(sum) + 1
                --}
                --else sumstr = sumstr . strToANSISymbols(sum . ".000.000$")
            --end
           
            elseif (string.match(low,"([0-9][0-9%.,%s]*)%s?[krкл]%s", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?тыс", 1)) then
                price = 1
                sum = string.match(low,"([0-9][0-9%.,%s]*)%s?[krкл]%s", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?тыс", 1)
                if (string.find(sum, "%.")) then
                    pos = string.find(sum,"%.")
                else
                    pos = string.find(sum,"%,")
                end

                sum = string.gsub(sum, " ", "")
                if (not pos) then
                    pos = string.len(sum) + 1
                end

                --if (pos)
                --{
                sum = string.sub(sum,1, pos-1) .. string.sub(sum, pos)
                --sampAddChatMessage(sum, -1)
                btbt = 3 - (string.len(sum) - pos + 1)
                --addChatMessage(btbt)
                for i = 1, btbt do
                    sum = sum .. '0'
                end
                --sampAddChatMessage(sum, -1)
                len = (string.len(sum) - 1) / 3
                for i = 1, len do
                    sum = string.sub(sum, 1, (string.len(sum) - 3*i - (i - 1))) .. "." .. string.sub(sum, string.len(sum) - 3*i - (i - 1) + 1)
                end
                --sampAddChatMessage(sum, -1)
                sum = string.gsub(sum, "^[0][0%.]*", '')
                sumstr = sumstr .. (sum .. "$")
                sumstrlen = string.len(sum) + 1
                --}
                --else {
                --    sumstr = sumstr . strToANSISymbols(sum . ".000$")
                --    sumstrlen = string.len(sum) + 5
                --}
            --end

            elseif (string.match(low,"([0-9][0-9%.,%s]*[0-9])")) then
                --AddChatMessage(sum1)
                sum = string.match(low,"([0-9][0-9%.,%s]*[0-9])", 1)
               
                price = 1
                --sum = string.match(low,"([0-9][0-9%.,%s]*)%s?[krкл][krкл]%s", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?лям", 1) or string.match(low,"([0-9][0-9%.,%s]*)%s?млн", 1)
                if (string.find(sum, "%.")) then
                    pos = string.find(sum,"%.")
                else
                    pos = string.find(sum,"%,")
                end

                sum = string.gsub(sum, " ", "")
                if (not pos) then
                    pos = string.len(sum) + 1
                end

                sum = string.gsub(sum, "%,", '.')
                numbersum = tonumber(sum)
                sum = string.gsub(sum, "%.", '')
                sum = string.gsub(sum, "%,", '')
                sum = string.gsub(sum, "%s", '')
                if (numbersum and numbersum < 100 and what ~= 4 and (what == 3 and cost > 1000000)) then
                    btbt = 6 - (string.len(sum) - pos + 1)
                    --addChatMessage(btbt)
                    for i = 1, btbt do
                        sum = sum .. '0'
                    end
                elseif (numbersum and numbersum < 1000 and what ~= 4) then
                    btbt = 3 - (string.len(sum) - pos + 1)
                    --addChatMessage(btbt)
                    for i = 1, btbt do
                        sum = sum .. '0'
                    end
                end
                len = (string.len(sum) - 1) / 3
                for i = 1, len do
                    sum = string.sub(sum,1,(string.len(sum) - 3*i - (i - 1))) .. "." .. string.sub(sum, string.len(sum) - 3*i - (i -1) + 1)
                end
                sumstr = sumstr .. (sum .. "$")
                sumstrlen = string.len(sum) + 1
            end
Писалось это очень давно и на AHK, а потом через ctrl+H переписывалось на луа, можно сделать куда лучше. надеюсь хоть что то из этого поможет
 
  • Нравится
Реакции: Nikitka2281488