Кибор » Кибор - Интегрированная среда разработки ботов » Готовые скрипты » Поиск текста в строке

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

1. Zireael - 17 Августа, 2018 - 05:46:12 - перейти к сообщению
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=' найти числа и знак операции (Отобразить)

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

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

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

Удалить из строки все цифры (Отобразить)
2. Zireael - 20 Августа, 2018 - 05:40:25 - перейти к сообщению
Ещё примеры (dll должна быть в папке с kibor.exe):
Найти в строке '19/20' два числа разделённых / (Отобразить)

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

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

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

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

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

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

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

Найти все ссылки в строке (Отобразить)
3. Kibor - 20 Августа, 2018 - 07:14:35 - перейти к сообщению
Дал ссылку с этой темы на эту.
4. AdryV - 29 Августа, 2018 - 12:40:24 - перейти к сообщению
есть пара вопросов.
есть файл и в нем ~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=
5. Zireael - 29 Августа, 2018 - 19:33:17 - перейти к сообщению
На примере файла 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 Кинжал хоть отличается числом вначале. А Гарпию как отличать от Кинжал, с которым.. разве что по длине текста или каким-то символам.
6. AdryV - 29 Августа, 2018 - 23:43:14 - перейти к сообщению
все разобрался теперь все ок
заметил свою ошибку....
у меня в коде 2 раза используется regex_search, а надо было сделать что бы если первый не нашел то второй не выполнялся но я это упустил когда упрощал код
а еще проще как вы привели пример одним поиском находить сразу два нужных, ну я этого не знал спасиб за помощь Подмигивание

пс... как выгрузить dll из памяти а то я так понимаю из-за того что она не выгружается Кибор частенько крашится
7. Zireael - 23 Сентября, 2018 - 10:45:20 - перейти к сообщению
Ещё примеры (dll должна быть в папке с kibor.exe):
Курс доллара/евро с сайта яндекса (Отобразить)

Узнать сколько 'Сегодня форум посетили' kibor-bot.com/forum (Отобразить)
8. Kibor - 23 Сентября, 2018 - 11:00:53 - перейти к сообщению
 Zireael пишет:
Узнать сколько 'Сегодня форум посетили'

А почему не
string всместо чара, если все равно даем стринг (Отобразить)
9. AdryV - 09 Мая, 2019 - 06:48:14 - перейти к сообщению
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;
даже если ищу по ".*"
в любой ситуации ошибка....
10. Zireael - 09 Мая, 2019 - 10:37:57 - перейти к сообщению
 Цитата:
в любой ситуации ошибка....

Какая ошибка?
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]));
}

Powered by ExBB FM 1.0 Final