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

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

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

> Без описания
Zireael
Отправлено: 30 Апреля, 2023 - 21:00:43
Post Id



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


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




 Цитата:
Каждый промежуток считается за один символ. Даже если он имеет несколько пробелов.

Это тут причём если удаляем пробелы.
Да, в X_S и Y_S записались координаты правильные. Дальше удаляем пробелы.
CODE:
if (dp) regexreplace(-1, #text, text, " ", "");

Сколько пробелов при этом удалилось неизвестно. И что получилось, теперь символ находится в другой позиции, если перед ним удалились пробелы.
К примеру, был символ 10й, в массивах X_S и Y_S тоже 10й элемент, но мы же удалили пробелы, допустим 3 пробела, теперь символ в строке не 10й, а 7й. А вот в массивах X_S и Y_S его координаты так и остались на том же месте.
Кстати, обычно функции замены возвращают количество замен, а не 1 или 0.
 
 Top
Kibor
Отправлено: 30 Апреля, 2023 - 21:15:02
Post Id



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


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




 Zireael пишет:
Сколько пробелов при этом удалилось неизвестно. И что получилось, теперь символ находится в другой позиции, если перед ним удалились пробелы.

Какое нам имеет значение сколько удалилось символов в тексте для клика по нужному символу на экране?
Надо кликнуть по десятому символу на экране? Посмотрели как текст выглядит на экране, посчитали каждый символ за один символ и каждый промежуток между ними (не смотря на его размер) за один символ и кликнули по нужному символу.
Эта галка только для удаления пробелов в конечном тексте.

Такой тест
1     2 3   4 5678 9


будет распознан так
1пробел2пробел3пробел4пробел5678пробел9

По тому клик по 8 элементу массива будет по 5

А галка Удалить пробелы действительна только для получения самого текста.
При ней он будет таким
123456789

Но при расчете координат надо промежутки считать символами. Не зависимо от расстояние. Любой промежуток считается одним пробелом. Одним символом.
 
 Top
Zireael
Отправлено: 30 Апреля, 2023 - 21:26:41
Post Id



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


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




CODE:
string text = "123 45 да";
// буква д имеет индекс 7

regexreplace(-1, #text, text, " ", ""); // удалить пробелы
regexsearch(1, #text, text, "да"); // найти слово да
int pos;
regexstart(#pos);
messagebox(pos); // 5
// X_S[5] и Y_S[5] на какой символ будет клик?
 
 Top
Kibor
Отправлено: 30 Апреля, 2023 - 21:58:52
Post Id



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


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




 Zireael пишет:
удалить пробелы

Вы намешали одно с другим.
readtext сам удаляет не нужные пробелы, при этом правильно составляя массив координат для каждого экранного символа. Давая нам понять что любой промежуток - один символ.
Если вы произвели какую то деформацию текста, то деформацию координат относительно деформации текста вы тоже должны произвести сами.
Если вы не будете делать не нужную операцию
CODE:
regexreplace(-1, #text, text, " ", ""); // удалить пробелы

то ДА начнется с 7 индекса.

Когда то я снимал видео где был перенос координат в вашем случае. Но зачем оно тут? Найдите свое Да без вашего удаления пробелов. За вас то сделал readtext. И по найденной позиции кликайте.

То есть текст на экране
123     45 да
будет для программы
123пробел45пробелда
Этот текст будет в результате в text
text = "123 45 да";
И как на экране, так и для регулярного выражения
CODE:
string text = "123 45 да";
regexsearch(1, #text, text, "да"); // найти слово да
messagebox (regexstart(0));//7

это будет седьмой символ.
Зачем что то еще деформировать?

Код распознает текст 123     45 да и кликнет ровно перед Д. В нижний левый его угол.
 Цитата:
string Text;
loadsymbolbase ("C:\Program Files (x86)\Kibor\basetext.sib");
readtext (NUM | RU, #Text, 2, 1, -1, -1, -1, -1, -1, 0, 50, 53, 346, 135, 361, -1);
//messagebox (Text);//тест
regexsearch(1, #Text, Text, "да"); // найти слово да
mousemove(53+symbolxpos(regexstart(0)), 346+symbolypos(regexstart(0)));
messagebox (regexstart(0));//7


И не надо никаких своих regexreplace
В визуальном редакторе это только удаляет пробелы в выводе текста в переменную.
Проверяйте этот код (или код с виз редактора) на блокноте с поиском слова ДА или другого в строке с любым количеством пробелов между словами.

Короче.. Посмотрели на экран, увидели что Д является 7 индексом (учитывая пробелы) и учитывая что первый символ - 0. Распознали текст с помощью readtext. Он сам сделает текст что Д будет как и выглядит - 7. Нашли его позицию с помощью regexsearch. Она и вернет на 7.
И по седьмому и кликнули.
(Добавление)
Можно конечно сделать в виз редакторе, что бы при этой галке не учитывались пробелы для координат..
А пока можно найти ДА с помощью регулярки, учитывающей что Могут быть пробелы между буквами Д и А.. Но не удаляя их.
(Добавление)
CODE:
string Text="Код распознает текст 123 45 да и кликнет ровно перед Д. В нижний левый его угол.";//да слитно
//string Text="Код распознает текст 123 45 д а и кликнет ровно перед Д. В нижний левый его угол.";//да раздельно
messagebox (Text);//тест
regexsearch(1, #Text, Text, "д(\s|)а"); // найти слово да или д а
messagebox (regexstart(0));//28
 
 Top
Kibor
Отправлено: 01 Мая, 2023 - 07:10:57
Post Id



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


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




 Код рас        ает текст 123 45 да и кликнет ровно п и это нужноедане    В ни     его угол.
 К многодададаслитно   распознает т       ст 123 45 д а и кликнет ровно перед Д. В нижний лев   угол.

И если удалить все пробелы, то начнутся проблемы, которые приведут что найдутся слова входящие в состав других слов.
Красные тоже найдутся. А должны найтись только зеленые.

Указать свою зону поиска надо...

 Цитата:
string Text;
loadsymbolbase ("C:\Program Files (x86)\Kibor\basetext.sib");
readtext (NUM | RU | MARK, #Text, 2, 1, -1, -1, -1, -1, -1, 0, 50, 221, 286, 897, 330, -1);
messagebox (Text);//тест

//Буквы в составе числа на цифры
loop(5)
{
while(regexreplace(-1, #Text, Text, "(?<=\d)о", "0", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "о(?=\d)", "0", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "(?<=\d)з", "3", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "з(?=\d)", "3", MULTILINE)){}
}

//Цифры в составе слова на буквы
loop(5)
{
while(regexreplace(-1, #Text, Text, "(?<=[а-я|А-Я])0", "о", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "0(?=[а-я|А-Я])", "о", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "(?<=[а-я|А-Я])3", "з", MULTILINE)){}
while(regexreplace(-1, #Text, Text, "3(?=[а-я|А-Я])", "з", MULTILINE)){}
}

messagebox (Text);//тест

string Texts[2];

regexsearch(2, #Texts[0], Text, "(?<=\s)д(\s|)а(?=\s)"); // найти слово да или д а

mousemove(221+symbolxpos(regexstart(0)), 286+symbolypos(regexstart(0)));
messagebox ("Мышь на первом настоящем ДА "+format(regexstart(0)));
mousemove(221+symbolxpos(regexstart(1)), 286+symbolypos(regexstart(1)));
messagebox ("Мышь на втором настоящем ДА "+format(regexstart(1)));
 
 Top
Zireael
Отправлено: 01 Мая, 2023 - 11:22:46
Post Id



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


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




Можно подправить ReadText в виз. редакторе, добавив смещение координат и остальных параметров при удалении пробелов. Пример:
CODE:
// допустим это координаты символов
int x_sim[99]={10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int y_sim[99]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

string text = "ab cd e fg"; // распознаая строка

// удаление пробелов
string temp;
int Pos, i;
while(regexsearch(1, #temp, text, " ")) // пока найден пробел
{
regexstart(#Pos);
//messagebox(Pos);
int Len = size(text);
for(i=Pos; i<Len; i++)
{
x_sim[i] = x_sim[i+1]; // сдвигаем координаты
y_sim[i] = y_sim[i+1];
}
regexreplace(1, #text, text, " ", ""); // удаляем пробел
}
///////////

Len = size(text);
string result = "";
for(i=0; i<Len; i++)result = result +format(x_sim[i])+" "+format(y_sim[i])+"^r^n";
messagebox(text+"^r^n^r^n"+result);

Пробелы удалены, координаты в массивах x_sim и y_sim соответствуют позиции символа в строке.
 
 Top
Kibor
Отправлено: 01 Мая, 2023 - 11:56:47
Post Id



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


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




Почти так..
Для однострочного текста
 
 Top
konctantin777
Отправлено: 02 Мая, 2023 - 07:53:18
Post Id



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


Покинул форум
Сообщений всего: 1140
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




А можно попросить в виз редактор, после галки убрать пробелы, добавить "нажать на 1й символ, если найдено такое то слово +- координаты" ? )
Который раз уже в играх приходиться по поиску текста проверять "где мы". Всё чаще встречается, что поиском картинки стабильно не найти...
(Добавление)
(или просто записать его координаты)
 
 Top
konctantin777
Отправлено: 03 Мая, 2023 - 19:35:46
Post Id



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


Покинул форум
Сообщений всего: 1140
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




 Kibor пишет:
Если вы произвели какую то деформацию текста, то деформацию координат относительно деформации текста вы тоже должны произвести сами

Так узнаю, что нужное слово есть
CODE:
if (regexsearch(1, #text_KIB2, text_KIB, "да")) // если слово найдено

А как правильно, чтобы текст не деформировался ?
 
 Top
Zireael
Отправлено: 03 Мая, 2023 - 19:38:39
Post Id



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


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




 Цитата:
А как правильно, чтобы текст не деформировался ?

Не ставить галку удалять пробелы. Либо исправить код в функции ReadText.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by