Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (2): [1] 2 »   

> Описание: С помощью регулярного выражения (dll)
Zireael
Отправлено: 17 Августа, 2018 - 13:46:12
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




https://drive.google.com/open?id=1tVl2hwvpO7M8neua3_00cDrJfFYD2iE_
Скачать dll и закинуть в папку с kibor.exe.

Доступные функции:
regex_search - поиск первого совпадения соответствующего регулярному выражению.
regex_iterator - поиск всех совпадений соответствующих регулярному выражению.
regex_replace - замена текста в строке.

Синтаксис:
regex_search(<строка, в которой ищем>, <регулярное выражение>, <адрес массива принимающего результат>, <количество строк в массиве>, <длина строк в массиве> )
regex_iterator(тоже что и regex_search)
regex_replace(<строка, в которой заменить>, <регулярное выражение>, <на что заменить>, <адрес массива принимающего результат>, <размер массива> )

Функция regex_search возвращает:
1 или больше - совпадение найдено. Если в регулярном выражении использовались подгруппы для захвата выражения, то возвращается количество подгрупп.
0 - совпадений не найдено.
-1 - размер массива, принимающего результат, меньше чем нужно.
-2 - длина строки массива, принимающего результат, меньше чем нужно.

Функция regex_iterator возвращает:
1 или больше - совпадение найдено. Если в регулярном выражении использовались подгруппы для захвата выражения, то возвращается количество подгрупп.
0 - совпадений не найдено.
-1 - размер массива, принимающего результат, меньше чем нужно.
-2 - длина строки массива, принимающего результат, меньше чем нужно.

Функция regex_replace возвращает:
1 - в случае успеха.
-1 - размер массива, принимающего результат, меньше чем нужно.

В длл используется библиотека c++ <regex>.
Описание регулярных выражений: https://msdn.microsoft.com/ru-ru...ry/bb982727.aspx
Кому лень читать, краткая справка. (Отобразить)

Примеры:
Найти в строке целое число (Отобразить)

В строке: 'Решите пример: 12 + 34=' найти числа и знак операции (Отобразить)

Найти в строке дату и номер телефона (Отобразить)

Найти в строке все целые числа (Отобразить)

Найти в строке курс доллара и евро (Отобразить)

Удалить из строки все цифры (Отобразить)
 
 Top
Zireael
Отправлено: 20 Августа, 2018 - 13:40:25
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




Ещё примеры (dll должна быть в папке с kibor.exe):
Найти в строке '19/20' два числа разделённых / (Отобразить)

Удалить из строки все пробелы (Отобразить)

Удалить пробелы вначале и конце строки (trim) (Отобразить)

Заменить пробелы на табуляцию (Отобразить)

Заменить запятые на точки (Отобразить)

В строке 'X=123, Y=456' поменять местами значения X и Y (Отобразить)

Проверить наличие в строке символов (Отобразить)

Найти в строке текст между value" и </div> (Отобразить)

Найти все ссылки в строке (Отобразить)
 
 Top
Kibor
Отправлено: 20 Августа, 2018 - 15:14:35
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Дал ссылку с этой темы на эту.
 
 Top
AdryV
Отправлено: 29 Августа, 2018 - 20:40:24
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




есть пара вопросов.
есть файл и в нем ~221000 строк такого типа:
CODE:
"5" "1" "41" "" "Кинжал, с которым справится даже неопытный воин.\n\nБазовый уровень атаки 4."

мне из этого файла нужно выдрать все строки такого типа:
CODE:
"5" "2" "41" "" "+0 Кинжал"

и

"5" "6" "33" "" "Гарпия"


когда пытаюсь с помощью этого кода выдрать вывод получается полнейший бред, я так предполагаю что сам Kibor не тянет и массивы и переменные засераются
но также предполагаю что возможно и сама dll не тянет
а также возможно у меня поиск кривой Ниндзя

в общем вот мой код:
код (Отобразить)

вот собсно сами файлы
в общем подскажите как мне сделать что бы не руками выдергивать файлы mobs и items а что бы все сразу и вместе обработалось
выходной файл должен получиться чет типа
CODE:
[41]

+0 Кинжал=
[+0 Кинжал]

41=
[42]

+1 Кинжал=
[+1 Кинжал]

42=

(Отредактировано автором: 29 Августа, 2018 - 20:49:36)

 
 Top
Zireael
Отправлено: 30 Августа, 2018 - 03:33:17
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




На примере файла LangPack_mobs: (Отобразить)

Обратите внимание на регулярное выражения, в нём две пары круглых скобок. Т. е. функция вернёт в первую строку массива result то что в первых скобках (т. е. число) и во вторую строку, то что во вторых скобках.
 Цитата:
"5" "6" "33" "" "Гарпия"

По сути мы ищем то что находится между "". Т. е. 33 и Гарпия. Регулярное выражение можно так понять:
кавычка (число) кавычка пробел0илибольше кавычка кавычка пробел0илибольше кавычка (любые символы) кавычка

 Цитата:
мне из этого файла нужно выдрать все строки такого типа:

 Цитата:
"5" "1" "41" "" "Кинжал, с которым справится даже неопытный воин.\n\nБазовый уровень атаки 4."
"5" "2" "41" "" "+0 Кинжал"
"5" "6" "33" "" "Гарпия"

И чем они отличаются? 3 числа в кавычках, 2 кавычки, текст в кавычках.
+0 Кинжал хоть отличается числом вначале. А Гарпию как отличать от Кинжал, с которым.. разве что по длине текста или каким-то символам.
 
 Top
AdryV
Отправлено: 30 Августа, 2018 - 07:43:14
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




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

пс... как выгрузить dll из памяти а то я так понимаю из-за того что она не выгружается Кибор частенько крашится

(Отредактировано автором: 30 Августа, 2018 - 07:50:11)

 
 Top
Zireael
Отправлено: 23 Сентября, 2018 - 18:45:20
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




Ещё примеры (dll должна быть в папке с kibor.exe):
Курс доллара/евро с сайта яндекса (Отобразить)

Узнать сколько 'Сегодня форум посетили' kibor-bot.com/forum (Отобразить)
 
 Top
Kibor
Отправлено: 23 Сентября, 2018 - 19:00:53
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 Zireael пишет:
Узнать сколько 'Сегодня форум посетили'

А почему не
string всместо чара, если все равно даем стринг (Отобразить)
 
 Top
AdryV
Отправлено: 09 Мая, 2019 - 14:48:14
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




Zireael , как быть с таки строками?

CODE:

"2" "10" "951" "" "Снижение получаемого урона в ближнем бою.
"
"2" "10" "952" "" "Снижение получаемого урона от дистанционных атак.
"
"2" "10" "953" "" "Снижение получаемого урона от дистанционных атак.
"

string k="\"+formatic(34);
string j="2";
string f="5";
r=k+f+k+"\s*"+k+j+k+"\s*"+k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"(.*)"+k;
даже если ищу по ".*"
в любой ситуации ошибка....

(Отредактировано автором: 09 Мая, 2019 - 14:49:16)

 
 Top
Zireael
Отправлено: 09 Мая, 2019 - 18:37:57
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
в любой ситуации ошибка....

Какая ошибка?
f=5, j=2 такой строки нет. В приведённых 3 строках есть f=2, j=10.
CODE:
external(INT, "wsprintf", "wsprintfA", "User32.dll" );
external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );

char a[1024];
wsprintf(address(#a[0]), "%c2%c %c10%c %c951%c %c%c %cСнижение получаемого урона в ближнем бою.%c%c%c", 34,34,34,34,34,34,34,34,34,13,10,34);
messagebox(format(#a[0]));

string k="\"+formatic(34);
string j="10";
string f="2";
string r=k+f+k+"\s*"+k+j+k+"\s*"+k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"((?:\r\n|.)*)"+k;

char result[2][100];
int x=regex_search(format(#a[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
messagebox("Найдено: "+format(x));
{
for(int i=0; i<x; i++)messagebox(format(#result[i][0]));
}
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Готовые скрипты »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by