Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
Приветствую, распознаю текст встроенной функцией и получаю строку с английскими буквами и дробным или целым числом. Мне нужно только число. Пытаюсь достать его через formatsn, но получаю ошибку (-10011001) если в строке есть буквы (это как я понял).
Подскажите как избавится от лишних символов или как достать нужное мне число?
Как я понял можно через массив char t[20] и в нем как-то анализировать символы и при необходимости удалять. Верно? Может есть готовый код у кого? Спасибо заранее!
Через распознавание у меня получается string text, а мне нужна строка типа t, чтобы потом ее засунуть в double.
Dantes3000
Отправлено: 29 Мая, 2018 - 20:27:44
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
neba2101 , А что тут должно работать? Ты переводишь текст в число и получаешь -10011001
neba2101
Отправлено: 29 Мая, 2018 - 20:53:05
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
Dantes3000 пишет:
neba2101 , А что тут должно работать? Ты переводишь текст в число и получаешь -10011001
Гениально! Очень помогло! Спасибо за помощь, Бро! Посмотрите мой пост выше, может уловите суть.
Я не могу понять как мне из этой строки "достать" только число. (Добавление)(для просмотра ссылки Вам необходимо авторизоваться) - нужно распознавать Unit price: 1.7 ea. (вместо 1.7 может быть целое или дробное число или <1).
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
neba2101 , просто...ты выше написал одно, а ниже пишешь код, который не работает и не будет работать даже приблизительно, хоть и сам всё понял выше.
Тут надо использовать функцию findtext, искать между "price: " и " ea." включая пробелы.
Функция formatsn не вытягивает цифры из текста, а преобразовывает, если в строке только они.
Zireael
Отправлено: 30 Мая, 2018 - 01:30:58
Эксперт
Покинул форум
Сообщений всего: 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);
}
Kibor
Отправлено: 30 Мая, 2018 - 16:19:48
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
На этом видео на основе данного изображения я показал как правильно работать с таким текстом. Как использовать некоторые хитрости для того что бы добиться нужного результата надежным и легким путем.
Покинул форум
Сообщений всего: 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>
Спасибо за помощь и потраченное время! Уже решил задачу немного другим способом. Была проблема с распознаванием. Дробное число распознавалось как 1 .7(с пробелом перед точкой) что вызывало трудности. Все решилось через посимвольное сравнение. Еще раз спасибо за участие!
CODE:
char ch[50];
int r;
string text;
loadsymbolbase ("C:\...путь к базе...\база.sib");
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.