Перезапись регулярки в файле

Enterprise

Новичок
Автор темы
18
2
Версия MoonLoader
.026-beta
Почитав гайды, я разобрался, как читать файл и добавлять содержимое, но не смог разобраться в следующем:
Код:
file_online = io.open(onlinePaths, "a")
lines = lines_from(onlinePaths)
for k,v in pairs(lines) do
    if v:match(sampGetPlayerNickname(i) .. '%:.*') then
        online_count = v:match(sampGetPlayerNickname(i) .. '%:(.*)')
        -- конекретно тут мне нужно при нахождении регулярки online_count в файле изменить ее значение на 1 и сохранить файл с его содержимым
    end
end
 

Enterprise

Новичок
Автор темы
18
2

Lua:
if online_count then
  online_count = tonumber(online_count) + 1
  v = v:gsub(sampGetPlayerNickname(i) .. ':%d+', sampGetPlayerNickname(i) .. ':' .. online_count)
  file_online:write(v .. '\n')
end
а если в ситуации нужно перезаписать несколько регулярок за раз, то код будет таким же? к примеру
Код:
  online_count, value_count = v:match(sampGetPlayerNickname(i) .. '%:(.*)%:(.*') then
 
Последнее редактирование:

Jertshat

Участник
28
41
а если в ситуации нужно перезаписать несколько регулярок за раз, то код будет таким же? к примеру
Код:
  online_count, value_count = v:match(sampGetPlayerNickname(i) .. '%:(.*)%:(.*') then
тогда используй несколько вызовов функции gsub() для каждой соответствующей замены. Также можешь использовать переменные, чтобы хранить измененные значения до того, как перезапишешь файл.

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

Lua:
if v:match(sampGetPlayerNickname(i) .. '%:.*%:.*') then
  local online_count, value_count = v:match(sampGetPlayerNickname(i) .. '%:(.*)%:(.*)')
  if online_count and value_count then
    online_count = tonumber(online_count) + 1
    value_count = tonumber(value_count) + 1
    v = v:gsub(sampGetPlayerNickname(i) .. ':%d+:%d+', sampGetPlayerNickname(i) .. ':' .. online_count .. ':' .. value_count)
    file_online:write(v .. '\n')
  end
end


в этом примере я добавил еще одно значение another_value, которое я хочу заменить в строке. также добавил еще один вызов gsub() для замены всех трех значений в строке.

обрати внимание, что регулярное выражение в вызове gsub() изменилось, чтобы соответствовать трем значениям в строке. в данном случае регулярное выражение sampGetPlayerNickname(i) .. ':%d+:%d+:%S+' соответствует любой подстроке, которая начинается с ника игрока, заданного через sampGetPlayerNickname(i), и за которой следует двоеточие (:), а затем три группы символов, разделенных двоеточием (%d+:%d+:%S+). заменяем это совпадение на новую строку, которая содержит ник игрока, за которым следует двоеточие, новые значения online_count, value_count и another_value.
 
Последнее редактирование:
  • Нравится
Реакции: Enterprise

Похожие темы

    • Закреплено
    • Статья
    Ответы
    197
    Просмотры
    683K
  1. Ответы
    497
    Просмотры
    243K
  2. У
    Ответы
    1
    Просмотры
    4K