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

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

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

> Описание: С помощью регулярного выражения (dll)
AdryV
Отправлено: 10 Мая, 2019 - 00:14:19
Post Id



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


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




Скрин
ну вот правда чель так тяжело скопировать то что я привел и запустить у вас же сразу выскочит ошибка.....
С ЛЮБЫМ ПАТЕРНОМ!!!!!!!!!!!!!!!!!!!!!!!!!!!!

(Отредактировано автором: 10 Мая, 2019 - 00:14:35)

 
 Top
Zireael
Отправлено: 10 Мая, 2019 - 00:27:43
Post Id



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


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




 Цитата:
чель так тяжело скопировать то что я привел

И где код, который приводит к этому?
 
 Top
AdryV
Отправлено: 10 Мая, 2019 - 00:51:44
Post Id



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


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




может в коде и есть ошибки но этот код обрабатывает 50000 строк без ошибок а когда сталкивается с теми строками выдает ошибку
CODE:
int pos_size_button0[2][4];
string text_button0[2];
int flag_button0[2];

pos_size_button0[0][0]=20; pos_size_button0[0][1]=50; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
pos_size_button0[1][0]=20; pos_size_button0[1][1]=80; pos_size_button0[1][2]=100; pos_size_button0[1][3]=20;
text_button0[0]="items"; text_button0[1]="mobs";

//////////

int pos_size_combo0[1][4];
string text_combo0[1][7];
int strok_combo0[1];
int flag_combo0[1];

pos_size_combo0[0][0]=20; pos_size_combo0[0][1]=10; pos_size_combo0[0][2]=100; pos_size_combo0[0][3]=80;
strok_combo0[0]=7;
text_combo0[0][0]="R2PN"; text_combo0[0][1]="R2HAZY"; text_combo0[0][2]="R2HELNET";
text_combo0[0][3]="R2GAME"; text_combo0[0][4]="R2ARENA"; text_combo0[0][5]="R2WORLD";
text_combo0[0][6]="R2RUOFF";
flag_combo0[0]=0;

//////////

int pos_size_static0[1][4];
string text_static0[1];

pos_size_static0[0][0]=20; pos_size_static0[0][1]=35; pos_size_static0[0][2]=80; pos_size_static0[0][3]=15;
text_static0[0]="Текст 0";

//////////

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
COMBO, #pos_size_combo0[0][0], #text_combo0[0][0], #strok_combo0[0], #flag_combo0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);
////////
int col, x, y;
getdisplay(col, x, y);

showdialog(0, "Диалог", x/2-84, y/2-85, 148, 134, 3, 1);
//////////
external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll");
//
char result[100][100];
string k="\"+formatic(34);
string r;
string id;
string name;
string name_konvert;
int save_flag_combo0=-1;
int count_string;
int i=0;
string s[100000];
int size_array=99999;
//////////////////////////////
loop()
{
if(flag_button0[0]>0) //items
{
flag_button0[0]=0;
patern("2");
name_konvert="/items_";
konvert();
}
//
if(flag_button0[1]>0) //mobs
{
flag_button0[1]=0;
patern("6");
name_konvert="/mobs_";
konvert();
}
sleep(50);
}
////////////////
function patern(string j)
{
string f="5";
if(flag_combo0[0]>1)f="2";

r=k+f+k+"\s*"+k+j+k+"\s*"+k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"(.*)"+k;
//if(flag_combo0[0]==1)size_array=60000;
//else size_array=40000;
}
///////////////
function konvert()
{
string obr=pathfolder()+"LangPack/"+text_combo0[0][flag_combo0[0]];
string pyt_file_origin=obr+"/LangPack.tsv";
string pyt_file_save=obr+name_konvert+text_combo0[0][flag_combo0[0]]+".ini";
int prov_konca=-1;
int hg=0;

if(save_flag_combo0!=flag_combo0[0]) {
save_flag_combo0=flag_combo0[0];
if(fopen(pyt_file_origin, "r")!=0) // если файл открылся
{
for(i=0; freadline(s[i])>0 && i<size_array; i++)text_static0[0]="Стр: "+format(i);
fclose();
}
else
{
text_static0[0]="Нет файла";
return 0;
}
count_string=i; // количество строк в файле
}
//
if(fopen(pyt_file_save, "w")>0) // если файл для записи открылся
{
for(i=0; i<count_string; i++) // для всех строк
{
text_static0[0]="Ищет: "+format(i);
int x=regex_search(s[i], r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>1)
{
prov_konca=0;
text_static0[0]="Запис: "+format(i);
id=format(#result[0][0]);
name=format(#result[1][0]);
fwrite("["+id+"]"+formatic(13)+formatic(10)+name+"=");
fwrite(ENDL);
fwrite("["+name+"]"+formatic(13)+formatic(10)+id+"=");
fwrite(ENDL);
}
/*
else
{
if(prov_konca==0) {
hg++;
if(hg>100)break;
else {prov_konca=-1;hg=0;}
}
}
*/
}
fclose();
text_static0[0]="Завершено";
}
}


файл который обрабатывается состоит из более 130000 строк
вот сам файл
и вот строки на которых ошибка
CODE:
"2" "10" "951" "" "Снижение получаемого урона в ближнем бою.
"
"2" "10" "952" "" "Снижение получаемого урона от дистанционных атак.
"
"2" "10" "953" "" "Снижение получаемого урона от дистанционных атак.
"

ПС.... на патерн поиска всеравно даже если будет ".*" все равно будет ошибка

------------------------------------------------------------
убрал ошибку в патерне.... но эт все равно

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

 
 Top
Zireael
Отправлено: 10 Мая, 2019 - 01:20:02
Post Id



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


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




Ошибка потому что в функцию regex_search в качестве строки передаётся одна кавычка, смотрим на скрине инструкцию, в которой была ошибка. Кавычка должна экранироваться \" если она одна.
Либо не обрабатывать такие строки, т. е. добавить проверку что строка состоит из одной кавычки, либо дописывать обратный слеш к таким строкам.
Также в конце паттерна k заменить на k*, т. к. в некоторых строках нет кавычки, потому что она на другой строке.
 
 Top
AdryV
Отправлено: 10 Мая, 2019 - 01:32:37
Post Id



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


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




получается перед вызовом функции regex_search мне нужно всю строку преобразовать в чар и потом первые 3 чара проверить?
 
 Top
Zireael
Отправлено: 10 Мая, 2019 - 01:36:47
Post Id



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


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




 Цитата:
получается перед вызовом функции regex_search мне нужно всю строку преобразовать в чар и потом первые 3 чара проверить?

Нет конечно.
CODE:
if(s[i]!=formatic(34))
 
 Top
Kibor
Отправлено: 10 Мая, 2019 - 01:38:42
Post Id



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


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




Можно не обрабатывать если к примеру 1 символ. Или двойная кавычка.

CODE:
external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll");
//
char result[100][100];
int i=0;
string k="\"+formatic(34);
string s[100];
string r=k+f+k+"\s*"+k+j+k+"\s*"+k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"(.*)"+k;
//////////////////////////////
i=0;
s[i]=formatic(34);//34

patern("6");


messagebox (s[i]);
if (s[i]!=formatic(34))
{
int x55=regex_search(s[i], r, address(#result[0][0]), sizearray(result), sizearray(result[]));
messagebox ("есть");
}
else messagebox ("пропустим");

function patern(string j)
{
string f="5";

r=k+f+k+"\s*"+k+j+k+"\s*"+k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"(.*)"+k;
}


 
 Top
AdryV
Отправлено: 10 Мая, 2019 - 02:13:19
Post Id



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


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




Zireael , спасиб за объяснение, я просто думал что надо будет проверять помимо " конец строки и переход на новую строку Подмигивание Kibor , спасиб за пример как отловить этот нюанс через отладку учту в будущем Подмигивание
 
 Top
Zireael
Отправлено: 10 Мая, 2019 - 11:41:48
Post Id



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


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




AdryV, сколько времени скрипт выполняется? Если нужно сделать быстро, то можно читать файл в массив char и использовать функцию regex_iterator, она сразу найдёт все совпадения.
Для примера:
 Цитата:
// найти все строки такого вида:
// "2" "10" "9" "" "Заклинание, поражающее врага горящей стрелой."
// в файл запишет: 9 Заклинание, поражающее врага горящей стрелой.

code (Отобразить)
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 5 (гостей: 5, зарегистрированных: 0)
« Готовые скрипты »


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




Powered by