Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / задачка ) / 10 сообщений из 10, страница 1 из 1
18.10.2016, 16:05
    #39329085
4wel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
помогите чем реализовать...

есть строка 'a * 100 / b'

при этом есть таблица значений/формул в который храниться что например
а | с + b
b | e + f
с | x + y

задача разложить формулу на составляющие, строку типа:

((x + y) + (e + f)) / (e + f)
...
Рейтинг: 0 / 0
18.10.2016, 16:07
    #39329087
4wel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
4wel,

т.е. для тех переменных которым есть соответствия найти и подставить из таблицы
...
Рейтинг: 0 / 0
18.10.2016, 18:36
    #39329241
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
Функция replace
на реплэйсе сидит и реплэйсом погоняет
...
Рейтинг: 0 / 0
18.10.2016, 18:41
    #39329246
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
4wel,

+
и в поиске есть .. на тему калькулятора на sql,
примерно как тут 5587534
...
Рейтинг: 0 / 0
18.10.2016, 18:45
    #39329251
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
orawish,

это тема не калькулятора, а, скорее, накопительных суммирования/нумерации по иерархии, то есть накопительный иерархический реплейс.
...
Рейтинг: 0 / 0
18.10.2016, 18:55
    #39329256
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
-2-orawish,

это тема не калькулятора, а, скорее, накопительных суммирования/нумерации по иерархии, то есть накопительный иерархический реплейс.
аналогично тому, как таки в том калькулятор е решался разбор вложенности круглых скобок
;)
...
Рейтинг: 0 / 0
18.10.2016, 21:43
    #39329345
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
Впрочем можно и без replace
По конкретно данному примеру, где все буквы в строке обозначают переменные, использовать алгоритм разложения на атомарные единицы и их обработку с последующим соединением.
Примерно так (базы нет под рукой, могу ошибиться без проверки, но пример будет понятен):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with a as
(select 'a * 100 / b + с' str from dual),
t as
 (select 'а' as sym, 'с + b' as form
  from dual
  union all
  select 'b' as sym, 'e + f' as form
  from dual
  union all
  select 'c' as sym, 'x + y' as form
  from dual),
a1 as
 (select level as n, substr(a.str, level, 1) as s
  from a
  connect by level <= length(a.str))
select listagg(coalesce('('||t.form||')', a1.s), '') within group (order by a1.n) from a1
left join t
on a1.s = t.sym
...
Рейтинг: 0 / 0
18.10.2016, 22:41
    #39329370
4wel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
Fogel,

к концу дня написал через циклы с реплейсами ) но может можно теперь найти более красивое решение
...
Рейтинг: 0 / 0
19.10.2016, 01:08
    #39329442
ЦТЕ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
Fogelмогу ошибитьсядля одноуровневой замены деление на посимволы перебор.
...
Рейтинг: 0 / 0
19.10.2016, 01:09
    #39329443
ну и зачем
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка )
orawishразбор вложенности круглых скобокгде в исходных данных скобки?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / задачка ) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]