Kibor |
Отправлено: 14 Ноября, 2018 - 14:51:32
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
GGman пишет: Это сарказм или нет?)
Ага.
GGman пишет: А то я реально замечал, что лог записывается 2 раза. При чем дважды за одну секунду функция, которая пишет лог, сработать просто не может, как минимум потому, что эта функция имеет паузы.
Где код полный, который можно запустить и посмотреть? Толку от таких ошибок как (у меня не работает или работает не так)
Вот код. Пишет быстро, не перезаписывает. Не вылетает.
CODE:int pos_size_static0[1][4];
string text_static0[1];
pos_size_static0[0][0]=5; pos_size_static0[0][1]=7; pos_size_static0[0][2]=228; pos_size_static0[0][3]=255;
text_static0[0]="";
//////////
createdialog(0, STATIC, #pos_size_static0[0][0], #text_static0[0]);
//////////
showdialog(0, "Диалог", 558, 234, 250, 300, 1, 1);
//////////
string T[10];
int n, n1;
loop()
{
rs();
text_static0[0]="";
for (n=0; n<10; n++)text_static0[0]=text_static0[0]+T[n]+formatic(13)+formatic(10);
//sleep(10);//Убрать после теста
}
function rs()
{
for (n=0; n<10; n++)T[n]=format (n)+" - ";
int R;
for (n=0; n<10; n++)
{
R=rand(5, 25);
for (int n1=0; n1<R; n1++)T[n]=T[n]+formatic(rand(65, 85));
}
}
Приводите код и укажите место где проблема. Исправлю если она там есть. А гадать что у кого как написано не буду.. |
|
|
ivantu |
Отправлено: 23 Ноября, 2018 - 08:16:47
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
Kibor пишет: Где код полный, который можно запустить и посмотреть? Толку от таких ошибок как (у меня не работает или работает не так)
Нашел я в чем ошибка, почему закрывается кибор при выводе логов:
Ошибка возникает при использовании:
CODE:
readtext (MARK, #auto, 3, 1, -1, -1, -1, -1, -1, 0, 30, 134, 413, 166, 445, wind);
Если переменную #auto назначить вручную auto=">"; то ошибок и закрытий нету.
ВОТ код основной программы:
Код основной: (Отобразить)
CODE:win wind=window ("BlueStacks Android PluginAndroid", -1, window ("BlueStacks", -1, -1));
int start_status=0;
loadsymbolbase (pathfolder()+"\swinautomate\sw_base_NEW.sib");
#include "F:\Soft\Kibor\swinautomate\logs.txt";
string auto;
string s="", rn=formatic(13)+formatic(10);
int log_z=0;
int max_string=15; // максимальное количество строк лога, лишние будут удалены начиная с начала
while(start_status!=0)sleep(500);
loop()
{
auto_battle(); // Авто бой включить
sleep(100);
}
//Авто бой включить
function auto_battle(){
//auto=">"; // Если напрямую назначаем, то все нормально
readtext (MARK, #auto, 3, 1, -1, -1, -1, -1, -1, 0, 30, 134, 413, 166, 445, wind);
// Если назначение идет через readtext, кибор закрывается достигнув лог 15
if (auto==">") { // alt 62
//sendmouse(LEFT, 123+symbolxpos(0)+rand(5, 5), 403+symbolypos(0)-rand(5, 5), wind);
text_static2[0]=add_string("Включили Автобой");
sleep(50);
//auto="";
}
}
/*LOGS*/
function add_string(string temp)
{
string ss[2];
s=s+temp+rn;
if(regexsearch(2, #ss[0], s, "(?<=\r\n).+?(?=\r\n)", SINGLELINE | RIGHTTOLEFT)>1) // ; получаем последние 2 строки
{
//if(ss[0] == ss[1]){regexsearch(1, #s, s, ".*\r\n(?=.*?\r\n)", SINGLELINE); return s;} // если они совпадают, обрезаем последнюю
if(log_z>max_string) // если достигнут максимум строк в логе
{
regexsearch(1, #s, s, "(?<=\r\n).*", SINGLELINE);
}
else log_z++;
}
return s;
}
Это код Диалога: (Отобразить)
CODE:
int pos_size_static2[1][4];
string text_static2[1];
pos_size_static2[0][0]=18; pos_size_static2[0][1]=14; pos_size_static2[0][2]=250; pos_size_static2[0][3]=343;
text_static2[0]="";
//////////
createdialog(2, STATIC, #pos_size_static2[0][0], #text_static2[0]);
//////////
showdialog(2, "Логи действий", 383, 257, 296, 413, 0, 1);
//////////
Помогите пожалуйста понять, решить.
(Добавление)
Даже попробовал схитрить, назначить другую переменную проверив if'ом, так же закрытие кибор, вывод что закрытие идет если в функции просто присутствует распознавание текста, и функция вывода лога.
CODE:
function auto_battle(){
string auto1;
readtext (MARK, #auto, 3, 1, -1, -1, -1, -1, -1, 0, 30, 134, 413, 166, 445, wind);
if (auto==">" && symbolcorrect(kor)>0.9) auto1=">";
if (auto1==">") { // alt 62
//sendmouse(LEFT, 123+symbolxpos(0)+rand(5, 5), 403+symbolypos(0)-rand(5, 5), wind);
text_static2[0]=add_string("Авто включено");
sleep(50);
//auto="";
}
}
|
|
|
Zireael |
Отправлено: 23 Ноября, 2018 - 11:39:14
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Да, непонятно почему ошибка. До 12 строк нормально, потом вылет, причём на readtext, хотя к выводу в статик она не имеет отношения.
Исправил функцию, а то количество строк не соответствовало:
CODE:/*LOGS*/
function add_string(string temp)
{
string ss[2];
s=s+temp+rn;
//messagebox(s);
if(regexsearch(2, #ss[0], s, "(?<=\r\n|^).+?(?=\r\n)", SINGLELINE | RIGHTTOLEFT)>1) // ; получаем последние 2 строки
{
//if(ss[0] == ss[1]){regexsearch(1, #s, s, ".*\r\n(?=.*?\r\n)", SINGLELINE); return s;} // если они совпадают, обрезаем последнюю
}
if(log_z>=max_string) // если достигнут максимум строк в логе
{
regexsearch(1, #s, s, "(?<=\r\n).*", SINGLELINE);
}
else log_z++;
return s;
} |
|
|
Zireael |
Отправлено: 27 Ноября, 2018 - 01:14:27
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
В данный момент уменьшить количество строк в логе и ждать когда Кибор найдёт в чём баг.
Облечу задачу, в блокноте ищем число:
code (Отобразить)CODE:win wind=window (-1, "Edit", window (-1, "Notepad", -1)); // блокнот
loadsymbolbase ("D:\Kibor2\basetext.sib");
string auto, rn=formatic(13)+formatic(10);
int pos_size_static0[1][4];
string text_static0[1];
pos_size_static0[0][0]=18; pos_size_static0[0][1]=14; pos_size_static0[0][2]=250; pos_size_static0[0][3]=343;
text_static0[0]="";
for(int i=0; i<13; i++)text_static0[0]=text_static0[0]+"Включили Автобой"+rn;
createdialog(0, STATIC, #pos_size_static0[0][0], #text_static0[0]);
showdialog(0, "Логи действий", 383, 257, 296, 413, 1, 1);
loop()
{
readtext (NUM, #auto, 8, 1, -1, -1, -1, -1, -1, 0, -1, 1, 1, 100, 100, wind); // ищем число
sleep(100);
}
Код работает, меняем i<13, на i<14 получаем ошибку или вылет без ошибки. |
|
|
|