Kibor |
Отправлено: 25 Февраля, 2019 - 23:36:53
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
White Bear пишет: Во время обучения, необходимо нажимать кнопку сохранить уже правильно распознанный символ ( в окне подбора параметров распознавания текста) ?
Как хотите. Если символ красный будет добавлен новый.
Если зеленый , то докорректирован будет старый.
White Bear пишет: Имеется ли возможность просмотреть содержание базы, какие символы, цифры и буквы уже добавлены в базу.
Нет |
|
|
White Bear |
Отправлено: 03 Марта, 2019 - 20:45:12
|
Прохожий
Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2019
Репутация: 0
|
Здравствуйте.
Направьте на путь истинный.....
создал свою базу символов, текст распознается правильно,
проверяю при помощи
messagebox(text_KIB)
я так понял, это в текстовом формате, в дальнейшем надо присвоить какой то переменной.
распознанный материал имеет такой вид :
22 + 33, или 12 - 11, может быть 0 + 45, ну и так далее. может быть умножение или деление.
(между цифрами и знаками возможно пробелы, как определить не знаю)
цифры могут быть как однозначными . так и двузначными, в дальнейшем,трехзначными.
мне необходимо из этого выделить цифры, и символ действия с этими цифрами.
произвести сложение, вычитание, умножение , деление, в зависимости от распознанного результата, ну и понятно получить результат, который я смогу использовать в дальнейшем.
Пожалуйста, как можно подробнее, с примерами.
мои познания в программировании ограничены рамками VBS, немного VBA, но VBS ограничен
работой с Win API. потому и обратил внимание на данный продукт.
Заранее спасибо. |
|
|
Zireael |
Отправлено: 03 Марта, 2019 - 21:14:42
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Пожалуйста, как можно подробнее, с примерами.
CODE:string Text="22 + 33";
int x=func(Text); // передаем в функцию строку
messagebox(x); // результат
function func(string s)
{
string num1, num2, znak;
if(regexreplace(1, #num1, s, "^\s*(\d+)\s*([\+\-\*\/])\s*(\d+)\s*$", "$1")==0)return -10011001;
//messagebox(num1);
if(regexreplace(1, #znak, s, "^\s*(\d+)\s*([\+\-\*\/])\s*(\d+)\s*$", "$2")==0)return -10011001;
//messagebox(znak);
if(regexreplace(1, #num2, s, "^\s*(\d+)\s*([\+\-\*\/])\s*(\d+)\s*$", "$3")==0)return -10011001;
//messagebox(num2);
if(znak=="+")return formatsn(num1) + formatsn(num2);
if(znak=="-")return formatsn(num1) - formatsn(num2);
if(znak=="*")return formatsn(num1) * formatsn(num2);
if(znak=="/")return formatsn(num1) / formatsn(num2);
return -10011001;
}
Если какой-то из параметров не распознан вернёт число -10011001. |
|
|
White Bear |
Отправлено: 06 Марта, 2019 - 20:09:34
|
Прохожий
Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2019
Репутация: 0
|
Доброе время суток. Спасибо за быстрый ответ.
сегодня только добрался до "самообразования" ::smile24.gif::
что-то у меня ничего не получается, не могу разобраться с пунктуацией и форматами.
вот "часть моих трудов"...
CODE:string text_KIB;
loadsymbolbase("E:\kibor_set\FF\BazaPrimers.sib");
string text, num1, num2, znak;; //пробовал и не объявлять эти переменные
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int sx_KIB, sy_KIB;
start_();
sleep(100);
readtext(NUM | MARK, #text_KIB, 8, 1, -1, -1, -1, -1, -1, 0, -1, sx_KIB+466, sy_KIB+360, sx_KIB+530, sy_KIB+376, -1);
messagebox(text_KIB)
вот мое начало. результат распознавания 57 - 39, соответствует предоставленному.
далее:
CODE:string Text=text_KIB;
int x=func(Text);
messagebox(x);
здесь получается -842150451
CODE:function func(string s)
{
string num1, num2, znak;
if(regexreplace(1, #num1, s, "^\s*(\d+)\s*([\+\-\*\/])\s*(\d+)\s*$", "$1")==0)return -10011001;
messagebox(num1);
if(regexreplace(1, #znak, s, "^\s*(\d+)\s*([\+\-\*\/])\s*(\d+)\s*$", "$2")==0)return -10011001;
messagebox(znak);
if(regexreplace(1, #num2, s, "^\s*(\d+)\s*([\+\-\*\/])\s*(\d+)\s*$", "$3")==0)return -10011001;
messagebox(num2);
if(znak=="+")return formatsn(num1) + formatsn(num2);
if(znak=="-")return formatsn(num1) - formatsn(num2);
if(znak=="*")return formatsn(num1) * formatsn(num2);
if(znak=="/")return formatsn(num1) / formatsn(num2);
return -10011001;
}
а вот здесь выдает "Ошибка: в STRINGS[7]=Text"
удаление пробелов вообще не понял в какой участок кода вставлять.
может я не правильно задавал вопрос???
(Добавление)
И еще один вопрос можно ли в функцию, вставит еще одну функцию ???
Спасибо. |
|
|
Zireael |
Отправлено: 07 Марта, 2019 - 07:17:48
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:string text_KIB="57 - 39"; // распознанная строка
int x=func(text_KIB); // передаём в функцию
messagebox(x);
function func(string s)
{
string num1, num2, znak;
regexreplace(-1, #s, s, "[^\d\+\-\*\/]", ""); // удалить из строки всё кроме чисел и знаков +-*/
if(regexreplace(1, #num1, s, "^(\d+)([\+\-\*\/])(\d+)$", "$1")==0)return -10011001;
//messagebox(num1);
if(regexreplace(1, #znak, s, "^(\d+)([\+\-\*\/])(\d+)$", "$2")==0)return -10011001;
//messagebox(znak);
if(regexreplace(1, #num2, s, "^(\d+)([\+\-\*\/])(\d+)$", "$3")==0)return -10011001;
//messagebox(num2);
if(znak=="+")return formatsn(num1) + formatsn(num2);
if(znak=="-")return formatsn(num1) - formatsn(num2);
if(znak=="*")return formatsn(num1) * formatsn(num2);
if(znak=="/")return formatsn(num1) / formatsn(num2);
return -10011001;
}
Цитата: И еще один вопрос можно ли в функцию, вставит еще одну функцию ???
Нет смысла, функции не локальные. Можно из одной функции вызывать другую, при необходимости передавать параметры через указатели. |
|
|
White Bear |
Отправлено: 07 Марта, 2019 - 21:09:14
|
Прохожий
Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2019
Репутация: 0
|
...
Цитата: И еще один вопрос можно ли в функцию, вставит еще одну функцию ???
Нет смысла, функции не локальные. Можно из одной функции вызывать другую, при необходимости передавать параметры через указатели.[/quote]
Спасибо, как говорится : "разжевали и в рот положили"
с функциями разобрался.
с regexreplace примерно понятно, с синтаксисом надо разобраться,
сложный...
с переменными num1,num2,znak все определяется корректно.
formatsn(num1) + - * / formatsn(num2) преобразует и считает.
еще пару вопросов (не надоел ещё?) :)
1. переменные объявленные в функции распространяются только в внутри этой функции?
CODE:function func(string s)
{
string num1, num2, znak; ... далее по тексту...
или их можно использовать во всем коде, или объявить сразу в блоке "Старт"
2.CODE:formatsn(num1) + formatsn(num2)
как лучше присвоить это выражение к переменной, для дальнейшего использования ?
например с функцией "key", или дальнейших расчетов?
Ещё раз спасибо, Вы сэкономили мне кучу времени. |
|
|
Zireael |
Отправлено: 07 Марта, 2019 - 21:14:38
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 1. переменные объявленные в функции распространяются только в внутри этой функции?
Если переменные объявлены в функции, то они локальные, видны только в самой функции.
Если объявить в начале скрипте, то будут глобальными и видны в любом месте скрипта.
Цитата: 2. как лучше присвоить это выражение к переменной, для дальнейшего использования ?
CODE:int k=formatsn(num1) + formatsn(num2); // присвоить переменной k |
|
|
|