![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| wofs |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 1.5.2007 Репутация: нет Всего: нет |
Вводные данные:
A,B числа есть переменная, где хранится формула в текстовом виде: RoundEx(A+B,10) RoundEx - некая функция, делающая округление как распарсить строку так, что бы приложение выполнило эту функцию (она может быть и другойи несколько разных функций могут чередоваться.) -- надеюсь понятно изложил... |
|||
|
||||
| Bitter |
|
||||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
Допустим ты хранишь строку в переменной Code:string. Code := 'RoundEx(A+B,10)' ;
Начинаешь перебирать Code по символам до первого разделителя или конца строки, записывая эти символы в новую переменную S. Разделителями считаются все знаки кроме букв и цифр. После того, как ты достиг разделителя, из Code удаляешь первые символы до текущего. В итоге ты получишь S = 'RoundEx', Code = '(A+B,10)'. Дальше. Анализируеш S. Проверяешь является ли эта строка функцией которую тебе надо обрабатывать или нет. Делается так:
так вот, если является, то вызываешь соответствующий обработчик, написанный тобой, в который передаешь Code.
а в нем уже ты должен разобрать Code на аргументы и вызвать реальную RoundEx. Добавлено @ 14:19 Кстати, забыл. В обработчике, ты должен не просто выделить аргументы, а Выделить строку, которая в скобках. После чего передать эту строку обратно в парсер (на случай если в скобках вложенная функция). А в парсер дописать, что если выделаня строка S не является функцией, значит это переменная, ну и вернуть её значение и остаток строки Code. Ну тут уже зависит от задачи, если ты пишешь интерпритатор, то нужно заводить таблицы переменных, обрабатывать присвоение значений и т.д. Это сообщение отредактировал(а) bems - 5.10.2009, 19:26 |
||||
|
|||||
| wofs |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 1.5.2007 Репутация: нет Всего: нет |
идея ясна, спасибо! попробуем
|
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
гы гы. А вы знали что F L O W E R (без пробелов) заменяется на FLOWER ?
Добавлено @ 15:06 Ах нет, это некто bems втихаря меняет. ишь какой...
Это сообщение отредактировал(а) bems - 5.10.2009, 16:45 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |