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

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

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

> Описание: Преобразование строки типа "-897.075" в число -897.075
Zireael
Отправлено: 21 Февраля, 2018 - 13:00:55
Post Id



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


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




CODE:
char a='-';
messagebox(formatsn(a)); // 0?
 
 Top
neba2101
Отправлено: 28 Мая, 2018 - 23:05:10
Post Id



Пользователь
Мастер


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




Приветствую, распознаю текст встроенной функцией и получаю строку с английскими буквами и дробным или целым числом. Мне нужно только число. Пытаюсь достать его через formatsn, но получаю ошибку (-10011001) если в строке есть буквы (это как я понял).

Подскажите как избавится от лишних символов или как достать нужное мне число?
Как я понял можно через массив char t[20] и в нем как-то анализировать символы и при необходимости удалять. Верно? Может есть готовый код у кого? Спасибо заранее!

CODE:

string text;
double t=1.3;
loadsymbolbase ("C:\.........\base.sib");

readtext (NUM | EN | MARK, #text, 7, 2, 37, -1, -1, -1, -1, 0, 50, 100, 100, 150, 120, -1);
if(t>=formatsn(text)){
messagebox("Распознанное число больше либо равно заданному");
}

 
 Top
Kibor
Отправлено: 29 Мая, 2018 - 00:19:30
Post Id



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


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




Несколько скринов выложите строк с числами.
 
 Top
neba2101
Отправлено: 29 Мая, 2018 - 17:17:33
Post Id



Пользователь
Мастер


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




 Kibor пишет:
Несколько скринов выложите строк с числами.


Строку прога распознает нормально.
CODE:

string text="unit price: 12.3 ea.";
string t="12.3";

textout(0, 100, 255, "распознанная строка - "+text, 1);
textout(1, 100, 270, "это я пытаюсь вывести formatsn(text) - "+format(formatsn(text)), 1);

if(formatsn(text)==12.3)textout(2, 100, 280, "formatsn(text)==12.3", 1);
else textout(2, 100, 285, "formatsn(text)!=12.3", 1);

if(formatsn(t)==12.3)textout(3, 100, 300, "formatsn(t)==12.3", 1);

pause(10000);


Через распознавание у меня получается string text, а мне нужна строка типа t, чтобы потом ее засунуть в double.
 
 Top
Dantes3000
Отправлено: 29 Мая, 2018 - 20:27:44
Post Id



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


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




neba2101 , А что тут должно работать? Ты переводишь текст в число и получаешь -10011001
 
 Top
neba2101
Отправлено: 29 Мая, 2018 - 20:53:05
Post Id



Пользователь
Мастер


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




 Dantes3000 пишет:
neba2101 , А что тут должно работать? Ты переводишь текст в число и получаешь -10011001


Гениально! Очень помогло! Спасибо за помощь, Бро! Посмотрите мой пост выше, может уловите суть.

Я не могу понять как мне из этой строки "достать" только число.
(Добавление)(для просмотра ссылки Вам необходимо авторизоваться) - нужно распознавать Unit price: 1.7 ea. (вместо 1.7 может быть целое или дробное число или <1).

(Отредактировано автором: 29 Мая, 2018 - 21:05:02)

 
 Top
Dantes3000
Отправлено: 29 Мая, 2018 - 23:13:43
Post Id



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


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




neba2101 , просто...ты выше написал одно, а ниже пишешь код, который не работает и не будет работать даже приблизительно, хоть и сам всё понял выше.

Тут надо использовать функцию findtext, искать между "price: " и " ea." включая пробелы.

Функция formatsn не вытягивает цифры из текста, а преобразовывает, если в строке только они.
 
 Top
Zireael
Отправлено: 30 Мая, 2018 - 01:30:58
Post Id



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


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




 Цитата:
Я не могу понять как мне из этой строки "достать" только число.

CODE:
string text="unit price: 12.3 ea."; // строка, в которой ищем число
double t;

char a[100];
int pos, len;
strcpy(#a[0], text);

if (findtext(#a[0], #pos, #len, "price: " & " ea")!=-1) // ищем текст между "price: " и " ea"
{
t=formatsn(format(#a[pos], len)); // присваиваем переменной
messagebox(t);
}
 
 Top
Kibor
Отправлено: 30 Мая, 2018 - 16:19:48
Post Id



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


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




На этом видео на основе данного изображения я показал как правильно работать с таким текстом. Как использовать некоторые хитрости для того что бы добиться нужного результата надежным и легким путем.


Код который используется
CODE:
char Text[999];
loadsymbolbase ("C:\Users\Вова\Desktop\Новая база.sib");
readtext (NUM | MARK, #Text[0], 15, 1, 50, -1, -1, -1, -1, 0, -1, 108, 377, 199, 391, -1);


int nom;
int siz;

//----- 1.7----


if (findtext(#Text[0], #nom, #siz, " " & "-" | " " & "-")==1)
{
string s=format(#Text[nom], siz);
double ci=formatsn(s);
messagebox(ci);
}
 
 Top
neba2101
Отправлено: 30 Мая, 2018 - 21:35:06
Post Id



Пользователь
Мастер


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




 Kibor пишет:
На этом видео на основе данного изображения я показал как правильно работать с таким текстом. Как использовать некоторые хитрости для того что бы добиться нужного результата надежным и легким путем.
<iframe width="560" height="315" src="https://www.youtube.com/embed/T_VnPENBd24" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

Код который используется
CODE:
char Text[999];
loadsymbolbase ("C:\Users\Вова\Desktop\Новая база.sib");
readtext (NUM | MARK, #Text[0], 15, 1, 50, -1, -1, -1, -1, 0, -1, 108, 377, 199, 391, -1);


int nom;
int siz;

//----- 1.7----


if (findtext(#Text[0], #nom, #siz, " " & "-" | " " & "-")==1)
{
string s=format(#Text[nom], siz);
double ci=formatsn(s);
messagebox(ci);
}


Спасибо за помощь и потраченное время! Уже решил задачу немного другим способом. Была проблема с распознаванием. Дробное число распознавалось как 1 .7(с пробелом перед точкой) что вызывало трудности. Все решилось через посимвольное сравнение. Еще раз спасибо за участие!

CODE:

char ch[50];
int r;
string text;
loadsymbolbase ("C:\...путь к базе...\база.sib");

loop(){
readtext (NUM | MARK, #ch[0], 30, 1, 25, -1, -1, -1, -1, 0, -1, 150, 150, 200, 170, -1);
r=0;
text="";
for(int q=0; q<size(#ch[0]); q++){
for(int e=0; e<10; e++){
if(ch[q]==format(e)){
if(r==1){
text=text+".";
r=2;
}
text=text+ch[q];
e=10;
}
if(ch[q]=='.' && r==0){
e=10;
r=1;
}
}
}
messagebox(formatsn(text));
}
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0)
« О программе Кибор »


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




Powered by