Zireael |
Отправлено: 12 Мая, 2019 - 19:04:20
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Я так думаю нужно regexstart использовать, но не пойму как. В примерах только regexstart(#Pos_start[0]); есть, но как отсюда выцепить координаты ?
regexstart позволит получить позицию первого символа слова, допустим 15, а координаты хранятся в symbolxpos и symbolypos. Значит symbolxpos(15) и symbolypos(15) это будут координаты первого символа найденного слова.
CODE:string text_KIB="Какой - то текст проп распознался"; // допустим это распознанная строка
int Pos_start;
if (regexsearch(1, #text_KIB, text_KIB, "прод|проп|обнов")) // если слово найдено
{
regexstart(#Pos_start); // узнали позицию первого символа
messagebox(Pos_start);
//mousemove(symbolxpos(Pos_start), symbolypos(Pos_start)); // добавить начальные координаты из readtext
} |
|
|
konctantin777 |
Отправлено: 12 Мая, 2019 - 21:13:26
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Не понимаю. Если 1м стоит "обнов", то она ищется, а "бою" нет. Если их поменять, то "бою" ищется, а "обнов нет. Код (Отобразить)function текст()
{
string text_KIB="Какой - то текст проп распознался"; // допустим это распознанная строка
sleep(10);
readtext(RU | MARK, #text_KIB, 8, 1, -1, 50, -1, #color_text_KIB_6[0], 1, 50, -1, 530, 675, 760, 730, -1);
sleep(50);
messagebox(text_KIB);
int Pos_start;
savescreen("D:\111.bmp", 530, 675, 760, 730, -1);
//regexreplace(-1, #text_KIB, text_KIB, "[^а-я]", ""); // удалить из строки всё кроме букв от 'a' до 'я'
////////
///////////
if (regexsearch(1, #text_KIB, text_KIB, "бою")) // если слово найдено
{
messagebox("нашли бою");
messagebox(text_KIB);
regexstart(#Pos_start); // узнали позицию первого символа
messagebox(Pos_start); pause(1500);
mouse(LEFT, symbolxpos(Pos_start)+540, 680+symbolypos(Pos_start)); // добавить начальные координаты из readtext
pause(1500);
}
//////////
if (regexsearch(1, #text_KIB, text_KIB, "прод | проп | пере | нагр | бой | бою | долж | грать")) // если слово найдено
{
messagebox("нашли разное...");
messagebox(text_KIB);
regexstart(#Pos_start); // узнали позицию первого символа
messagebox(Pos_start); pause(1500);
mouse(LEFT, 540+symbolxpos(Pos_start), 680+symbolypos(Pos_start)); // добавить начальные координаты из readtext
pause(1500);
}
/////////////////////////////////////////////////////////////////
if (regexsearch(1, #text_KIB, text_KIB, "обнов")) // если слово найдено
{
messagebox("нашли обнов");
messagebox(text_KIB);
regexstart(#Pos_start); // узнали позицию первого символа
messagebox(Pos_start); pause(1500);
mouse(LEFT, symbolxpos(Pos_start)+540+500, 680-400+symbolypos(Pos_start)); // добавить начальные координаты из readtext
pause(1500);
}
//////////
if (regexsearch(1, #text_KIB, text_KIB, "уров")) // если слово найдено
{
messagebox("нашли уровн");
messagebox(text_KIB);
regexstart(#Pos_start); // узнали позицию первого символа
messagebox(Pos_start); pause(500);
mouse(LEFT, 540+symbolxpos(Pos_start), 680+symbolypos(Pos_start)); // добавить начальные координаты из readtext
pause(2000);
mouse (LEFT, 490, 460);
}
///////////
if (regexsearch(1, #text_KIB, text_KIB, "прод | проп | пере | нагр | бой | бою | долж | грать")) // если слово найдено
{
messagebox("нашли разное...");
messagebox(text_KIB);
regexstart(#Pos_start); // узнали позицию первого символа
messagebox(Pos_start); pause(1500);
mouse(LEFT, 540+symbolxpos(Pos_start), 680+symbolypos(Pos_start)); // добавить начальные координаты из readtext
pause(1500);
}
messagebox(text_KIB);
mouse (LEFT, 25, 350);
pause(500);
}
Ставлю messagebox(text_KIB); в начале и в конце. В начале отображает всё корректно, а который в конце функции показывает пустое поле...(Отредактировано автором: 12 Мая, 2019 - 21:16:33) |
|
|
Zireael |
Отправлено: 12 Мая, 2019 - 21:31:44
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Потому что результат поиска записывается в ту же переменную.
CODE:string text_KIB="Какой - то текст проп распознался";
if (regexsearch(1, #text_KIB, text_KIB, "прод|проп|обнов"))messagebox(text_KIB); // если найдется, то
// text_KIB будет содержать 'проп'
// т. е. искать другие слова в этой переменной уже нет смысла
Поэтому результат поиска надо записывать в другую переменную.
CODE:string text_KIB="Какой - то текст проп распознался";
string text_KIB2;
if (regexsearch(1, #text_KIB2, text_KIB, "прод|проп|обнов"))messagebox(text_KIB2);
messagebox(text_KIB); // осталось без изменений
Цитата: "прод | проп | пере | нагр | бой | бою | долж | грать"
Пробелы не допустимы, если они не участвуют в поиске.
Если text_KIB="проп", то такой шаблон "прод | проп | обнов" не найдёт слово, потому что искать будет ' проп ' (с пробелами вначале и конце слова). |
|
|
007wan |
Отправлено: 22 Мая, 2019 - 12:31:51
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: char c[10];
string s="";
if(regexsearch(1, #s, format(#c[0]), "^Н+$"))messagebox("Нашли"); Не работает.
(Добавление)
CODE:char c[5];
string s="орролрлрл";
if(regexsearch(1, #s, format(#c[0]), "^Н+$"))
{
messagebox("Нашли");
}
else
{
messagebox("НЕ нашли");
}
Любой текст и выдает "Нашли" |
|
|
007wan |
Отправлено: 22 Мая, 2019 - 12:34:47
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Тоже самое CODE:char c[10];
string s="123456789089890";
if(regexsearch(1, #s, format(#c[0]), "^Н{3}"))messagebox("Нашли");
(Добавление)
Zireael пишет: Так в массив ничего и не скопировано. strcpy(). Ай, думал тут это не недо.
(Добавление)
И чё. такой же 0 результат.CODE:char c[10];
string s="123456789089890";
strcpy(#c[0], s);
if(regexsearch(1, #s, format(#c[0]), "^Í{3}"))messagebox("Íàøëè"); |
|
|
Kibor |
Отправлено: 22 Мая, 2019 - 12:44:53
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
007wan пишет: char c[10];
string s="123456789089890";
strcpy(#c[0], s);
CODE:char c[10];
string s="123456789089890";
strcpy(#c[0], s);
messagebox (format(#c[0]));
CODE:char c[10];
string s="123456789";
strcpy(#c[0], s);
messagebox (format(#c[0]));
CODE:string s="123456789089890";
new char c[size(s)+1];
strcpy(#c[0], s);
messagebox (format(#c[0])); |
|
|
Kibor |
Отправлено: 22 Мая, 2019 - 12:58:01
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
007wan пишет: Я думал можно вводить хоть миллионный текст, а брать будет 10 символов из этой строки, а потом уже сравнивать. Это не правильно.
Правильно.
Когда используется копирование целой строки, программист должен быть уверен что в чаре вся строка.
Для этого есть проверка что вернула функция strcpy
CODE:messagebox (strcpy(#c[0], s));
А если вы такое сделаете в другом языке, то получите вылет программы вообще. Это в Кибор он просто не запишет, так как знает на сколько массив. |
|
|
|