Небольшой вопросик в коде
-
- Posts: 24
- Joined: 20 Jan 2022, 15:58
Небольшой вопросик в коде
RegexMatch(A_LoopField,
Last edited by Vladik2304 on 07 May 2022, 08:46, edited 2 times in total.
Re: Небольшой вопросик в коде
Vladik2304 wrote: ↑06 May 2022, 14:56Подскажите, почему этот код находит id через раз. Т.е. он не всегда находит число в [ ]
Ниже прикрепил скрин из чата и код
- Attachments
-
- IMG_20220506_234345.jpg (216.4 KiB) Viewed 1113 times
-
- Posts: 24
- Joined: 20 Jan 2022, 15:58
Re: Небольшой вопросик в коде
Предоставил чатлог файлом ниже.mcl wrote: ↑06 May 2022, 15:52Vladik2304 wrote: ↑06 May 2022, 14:56Подскажите, почему этот код находит id через раз. Т.е. он не всегда находит число в [ ]
Ниже прикрепил скрин из чата и код
Отвечу сразу на вопрос: "Что будет делать код если не будет найден id", надо чтобы просто через AddChatMessage вывод "id не найден"
Last edited by Vladik2304 on 07 May 2022, 08:45, edited 1 time in total.
Re: Небольшой вопросик в коде
Code: Select all
FileRead, Str, chatlog.txt
rx = ; Регулярное выражение разбито на части для упрощения понимания
( Join LTrim Comments
m) ; Флаг m (multi-line) упрощает работу с многострочными текстами
^ ; Символ ^ - начало строки (с флагом m - любой строки, а не всего текста)
\[\d\d:\d\d:\d\d\] ; Метка времени в формате [NN:NN:NN], где N - любое число
\s* ; Пробелы после метки времени (похоже, обычно один, но мало ли что)
\S+_\S+ ; Имя в формате ТЕКСТ_ТЕКСТ; \S - не-пробелы (например, буквы)
\[(\d+)\] ; Числовой Id в квадратных скобках. Круглые скобки - для записи в match1
\s:\s ; Пробел-двоеточие-пробел, разделяющие автора сообщения и его текст
.* ; Текст сообщения, совершенно любой.
$ ; Конец строки (как и ^, зависит от флага m)
)
RegexMatch(Str, rx, match)
If (match1 == "") {
MsgBox ID не найден ; AddChatMessage("ID не найден")
Return
}
MsgBox % match1
; остальной код
Флаг m позволяет избавиться от команд StringReplace и возни с переносами строк (`n)
Если этот скрипт запустить в той же папке, что и chatlog.txt, он выдаёт id из сообщения первого найденного игрока. Но есть важные моменты:
1. Выдаётся id простого игрока, не администратора. В сообщениях администраторов между меткой времени и именем стоит статус ([00:00:00] Администратор Иван_Иванов[1]), а по регулярке после метки времени сразу должно идти имя.
2. Выдаётся id только для публичных сообщений. Например, Петр_Петров[2] для Семен_Семенов[3] будет пропущено, так как по регулярке после имени и id должно сразу идти двоеточие и текст сообщения.
3. Текст сообщения может быть любым. В вашем исходном коде в тексте сообщения должна была быть хотя бы одна цифра − не знаю, зачем.
Соответственно, для достижения желаемого результата, вероятно, придётся подправить те или иные части регулярки.
Who is online
Users browsing this forum: No registered users and 8 guests