Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 2.17 Преобразование строки типа "-897.075" в число -897.075

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

11. Zireael - 21 Февраля, 2018 - 05:00:55 - перейти к сообщению
CODE:
char a='-';
messagebox(formatsn(a)); // 0?
12. neba2101 - 28 Мая, 2018 - 15:05:10 - перейти к сообщению
Приветствую, распознаю текст встроенной функцией и получаю строку с английскими буквами и дробным или целым числом. Мне нужно только число. Пытаюсь достать его через 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("Распознанное число больше либо равно заданному");
}

13. Kibor - 28 Мая, 2018 - 16:19:30 - перейти к сообщению
Несколько скринов выложите строк с числами.
14. neba2101 - 29 Мая, 2018 - 09:17:33 - перейти к сообщению
 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.
15. Dantes3000 - 29 Мая, 2018 - 12:27:44 - перейти к сообщению
neba2101 , А что тут должно работать? Ты переводишь текст в число и получаешь -10011001
16. neba2101 - 29 Мая, 2018 - 12:53:05 - перейти к сообщению
 Dantes3000 пишет:
neba2101 , А что тут должно работать? Ты переводишь текст в число и получаешь -10011001


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

Я не могу понять как мне из этой строки "достать" только число.
(Добавление)(для просмотра ссылки Вам необходимо авторизоваться) - нужно распознавать Unit price: 1.7 ea. (вместо 1.7 может быть целое или дробное число или <1).
17. Dantes3000 - 29 Мая, 2018 - 15:13:43 - перейти к сообщению
neba2101 , просто...ты выше написал одно, а ниже пишешь код, который не работает и не будет работать даже приблизительно, хоть и сам всё понял выше.

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

Функция formatsn не вытягивает цифры из текста, а преобразовывает, если в строке только они.
18. Zireael - 29 Мая, 2018 - 17:30:58 - перейти к сообщению
 Цитата:
Я не могу понять как мне из этой строки "достать" только число.

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);
}
19. Kibor - 30 Мая, 2018 - 08:19:48 - перейти к сообщению
На этом видео на основе данного изображения я показал как правильно работать с таким текстом. Как использовать некоторые хитрости для того что бы добиться нужного результата надежным и легким путем.


Код который используется
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);
}
20. neba2101 - 30 Мая, 2018 - 13:35:06 - перейти к сообщению
 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));
}

Powered by ExBB FM 1.0 Final