Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Разбивка строки фильтра на выражения / 25 сообщений из 25, страница 1 из 1
16.06.2009, 09:31
    #36042699
dakota97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Товарищи, может кто то делал функцию разбивки призвольной строки фильтра на выражения. Из исходных параметров кроме строки фильтра есть нименования колонок и их типы.
т.е. есть например с1=1 and c2='dakota' and c3>1000
в итоге должны получится отдельные выражения:
с1=1
c2='dakota'
c3>1000
и еще както бы записывать логические операции между выражениями?!
Фильтр может быть сложным с функциями и скобками
Может кто то уже такое делал?!
спасибо
...
Рейтинг: 0 / 0
16.06.2009, 12:02
    #36043108
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Если хочется красиво, не поленитесь оформить интерфейс как в запросах
Колонка|операнд|условие|скобки
Любой другой вариант чаще всего предусматривает наличие спецсимвола для парсинга
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
16.06.2009, 12:34
    #36043220
dakota97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Я хочу вывести уже результат в удобный интерфейс!
но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали
...
Рейтинг: 0 / 0
16.06.2009, 13:51
    #36043509
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Ну так распарси произвольно по операторам and&or
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
16.06.2009, 15:03
    #36043774
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
dakota97Товарищи, может кто то делал функцию разбивки призвольной строки фильтра на выражения. Из исходных параметров кроме строки фильтра есть нименования колонок и их типы.
т.е. есть например с1=1 and c2='dakota' and c3>1000
в итоге должны получится отдельные выражения:
с1=1
c2='dakota'
c3>1000
и еще както бы записывать логические операции между выражениями?!
Фильтр может быть сложным с функциями и скобками
Может кто то уже такое делал?!
спасибо
В большинстве случаев задача парсинга выражений лишняя. Ведь изначально например никакого фильтра нет - его строит пользователь.
Поэтому достаточно, помимо применения фильтра, хранить его где-то в некоем простом для парсинга формате, например XML, в виде, удобном как для загрузки в визуальный редактор так и для сборки из него конечного выражения.
Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  <filter>
     <item arg1="c1" op="=" arg2="1" next="and" />
     <item op="(" />
     <item arg1="c2" op="=" arg2="'dakota'" next="and" />
     <item arg1="c3" op=">" arg2="1000"  />
     <item op=")" />
  </filter>
В этом примере, каждый item это строка в визуальном построителе со столбцами arg1, op, arg2, next.
А текст фильтра получается путем последовательной конкатенации этих полей у все item'ов.
...
Рейтинг: 0 / 0
16.06.2009, 17:08
    #36044220
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Anatoly Moskovsky ...хранить его где-то в некоем простом для парсинга формате, например XML...По моему отличная идея. Только встает вопрос контроля правильности вводимых скобок - т.е. закрывающая скобка должна соответствовать открывающей и т.п. Тогда, быть может, имеет смысл нечто подобное ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  <filter>
     <item arg1="c1" op="=" arg2="1" next="and" />
     <block>
          <block next="or">
               <item arg1="c2" op="=" arg2="'dakota'" next="and" />
               <item arg1="c3" op=">" arg2="1000"  />
          <block/>
          <block>
               <item arg1="c2" op="=" arg2="'moscow'" next="and" />
               <item arg1="c3" op=">" arg2="800"  />
          <block/>
     <block/>
  </filter>
Хотя в этом случае для "собирания" текста фильтра последовательной конкатенации будет недостаточно.
Конечно - на вкус и цвет ... Но идея понравилась !

Good Luck !
...
Рейтинг: 0 / 0
16.06.2009, 17:17
    #36044255
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
ФилиппНу ваще нормальные люди просто на PFC смотрят. :-))
...
Рейтинг: 0 / 0
16.06.2009, 19:48
    #36044585
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
ФилиппФилиппНу ваще нормальные люди просто на PFC смотрят. :-))
Посмотрел - не то.
PFC'шный построитель фильтра (стиль 1) не поддерживает модификацию предыдущего фильтра, а строит новый с нуля. А второй стиль вообще заставляет юзера работать напрямую с выражением фильтра.
Хотя согласен, посмотреть стоит, хотя бы для того чтобы знать его возможности.
...
Рейтинг: 0 / 0
16.06.2009, 19:52
    #36044593
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
ChVAnatoly Moskovsky ...хранить его где-то в некоем простом для парсинга формате, например XML...По моему отличная идея. Только встает вопрос контроля правильности вводимых скобок - т.е. закрывающая скобка должна соответствовать открывающей и т.п.
Проверка соответствия скобок пишется в три строчки, прямо внутри того цикла что собирает выражение фильтра.
Проверка правильности выражения в целом - в одну строчку: выполнить describe("evaluate (...) ") с фильтром для первой строки DW.
...
Рейтинг: 0 / 0
17.06.2009, 09:39
    #36045095
dakota97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Anatoly Moskovsky, пользователь может создать фильтр или в моем конструкторе или в строке произвольно фильтра. Было бы здорово суметь распарсить все то что он ввел. PB ведь как то парсит!?:)
...
Рейтинг: 0 / 0
17.06.2009, 10:11
    #36045160
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Чтобы писать парсеры, неплохо бы знать теорию. Например, наиболее известное прочитать. Но Вам же, как всегда, охота чтобы за вас кто-то это сделал, разжевал и в рот положил...
...
Рейтинг: 0 / 0
17.06.2009, 11:34
    #36045480
dakota97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Локшин МаркЧтобы писать парсеры, неплохо бы знать теорию. Например, наиболее известное прочитать. Но Вам же, как всегда, охота чтобы за вас кто-то это сделал, разжевал и в рот положил...

опять двадцать пять!!!
Жаль что враг у меня здесь появился.
Марк, мне я действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты. Если рассуждать как вы, то надо на ассемлере делать все не пользуя чужие финкции. Спасибо конечно за литературу но мне ее читать некогда, поэтому я и здесь. И перестаньте тыкать меня "мордой" в книги! Здесь много людей, которые готовы поделиться опытом и знаниями, на них и надесь. Нормальное обсуждение вроде, что вам не нравится то?!можно и поглупее вопросы на форуме найти и до них докапаться!?
...
Рейтинг: 0 / 0
17.06.2009, 12:51
    #36045781
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
dakota97Anatoly Moskovsky, пользователь может создать фильтр или в моем конструкторе или в строке произвольно фильтра. Было бы здорово суметь распарсить все то что он ввел. PB ведь как то парсит!?:)
PB далеко не все запросы умеет переводить из синтаксической формы в графическую.
...
Рейтинг: 0 / 0
17.06.2009, 19:42
    #36046988
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
dakota97 действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты.
Сама идея писать какие то парсеры на РВ - глубоко порочна. Вы может всё таки поясните ЗАЧЕМ вам эта "функция разбивки призвольной строки фильтра на выражения", какова БИЗНЕС задача, которую вы пытаетесь решить?
Или вы решаете чисто техническую задачу (пишете базовые классы, framework какой-то)? В таком случае вы занимаетесь не своим делом, у вас нет достаточной квалификации (как впрочем желания и, как вы сами сказали, времени) для этого занятия...
...
Рейтинг: 0 / 0
18.06.2009, 00:48
    #36047279
rcryo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
авторЯ хочу вывести уже результат в удобный интерфейс!
но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали
Я бы хранил строку фильтра и результат деятельности конструктора раздельно. Если фильтр набран в конструкторе - храним XML для конструктора и строку фильтра. В интерфейсе конструктора предусмотрел бы возможность перехода в "ручной" режим ввода фильтра, при этом конструктор отключается и хранится только набранная строка фильтра. Для уже имеющихся фильтров набранных вручную конструктор не работает, работает ручной режим. Простые фильтры можно было бы переводить в конструктор по запросу юзера, но без гарантии получения того же результата.
...
Рейтинг: 0 / 0
18.06.2009, 00:58
    #36047286
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
dakota97Я хочу вывести уже результат в удобный интерфейс!
но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали
Попробуйте оттолкнуться от уже подобного - это конструирование "where" в DW.
Там и принцип (включая вложения) и интерфейс вполне удовлетворительный.

А главное на мой взгляд, это то (как говорит "Anatoly Moskovsky": ...В большинстве случаев задача парсинга выражений лишняя. Ведь изначально например никакого фильтра нет - его строит пользователь...), что фильтра вначале нет, его только строят, а значит и парсить нечего.

Ну, а если всёже фильтр изначально есть и он не Ваш, то засунуть его в конструктор типа "where" в DW будет практически не возможно. Да и задача выглядит что-то типа: "да я даже SQL запроса не знаю, не то чтобы ещё фильтра и т.д.".

Но всегда (и даже в этом случае) есть вариант, например отсечь из SQL запроса конструкцию "WHERE" и иметь её как "базу фильтра", к которой пользователь через "AND" подсоединяет уже всё остальное используя Ваш интерфейс.
...
Рейтинг: 0 / 0
18.06.2009, 01:48
    #36047314
dakota97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Филиппdakota97 действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты.
Сама идея писать какие то парсеры на РВ - глубоко порочна. Вы может всё таки поясните ЗАЧЕМ вам эта "функция разбивки призвольной строки фильтра на выражения", какова БИЗНЕС задача, которую вы пытаетесь решить?
Или вы решаете чисто техническую задачу (пишете базовые классы, framework какой-то)? В таком случае вы занимаетесь не своим делом, у вас нет достаточной квалификации (как впрочем желания и, как вы сами сказали, времени) для этого занятия...

БИЗНЕС задача?!
я хочу сделать фильтр для dw grid и мне кажется логичным и удобым что если кто то введет(или на будет изначально) строку то ее можно распарсить в конструктор!


я понял что никто этого не делал и вообще это почти невозможно!
форму XML буду пользовать!
всем спасибо за ответы
...
Рейтинг: 0 / 0
18.06.2009, 02:25
    #36047326
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
dakota97я понял что никто этого не делал и вообще это почти невозможно!
Почему же, парсер как раз можно написать.
Я вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу.
После этого вам останется преобразовать дерево в набор строк для конструктора фильтра. Еще за 500 долл могу и это сделать.
Так что если надумаете - вы знаете как меня найти. :)

форму XML буду пользовать!
Кстати, если фильтр этот не требуется сохранять между запусками приложения, то вместо XML удобнее использовать просто массив структур или даже просто Datastore аналогичного формата, чтобы исключить ненужную сериализацию в формат XML.
...
Рейтинг: 0 / 0
18.06.2009, 08:36
    #36047419
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Anatoly MoskovskyЯ вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу.
Такая разница достигается за счет использования чего-нибудь типа YACC?
...
Рейтинг: 0 / 0
18.06.2009, 12:06
    #36047947
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Локшин МаркAnatoly MoskovskyЯ вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу.
Такая разница достигается за счет использования чего-нибудь типа YACC?
Да.
...
Рейтинг: 0 / 0
18.06.2009, 13:30
    #36048213
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Anatoly MoskovskyЛокшин МаркAnatoly MoskovskyЯ вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу.
Такая разница достигается за счет использования чего-нибудь типа YACC?
Да.
Все же мне кажется что только на выяснение всех особенностей разбора в DataWindow\проверки того что получилось уже больше дня уйдет...
...
Рейтинг: 0 / 0
18.06.2009, 14:41
    #36048431
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Локшин МаркВсе же мне кажется что только на выяснение всех особенностей разбора в DataWindow\проверки того что получилось уже больше дня уйдет...
Да ладно, все уже давно выяснено за 12 лет :)
Кроме того, задача парсинга, в отличие от задачи вычисления, не требует разбора особенностей работы DW.
...
Рейтинг: 0 / 0
18.06.2009, 17:13
    #36048988
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Anatoly MoskovskyКроме того, задача парсинга, в отличие от задачи вычисления, не требует разбора особенностей работы DW.
Например знания того что приоритет у операций в DataWindow не совпадает с приоритетом в PowerScript'е...
...
Рейтинг: 0 / 0
18.06.2009, 18:59
    #36049253
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
dakota97Филиппdakota97 действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты.
Сама идея писать какие то парсеры на РВ - глубоко порочна. Вы может всё таки поясните ЗАЧЕМ вам эта "функция разбивки призвольной строки фильтра на выражения", какова БИЗНЕС задача, которую вы пытаетесь решить?
Или вы решаете чисто техническую задачу (пишете базовые классы, framework какой-то)? В таком случае вы занимаетесь не своим делом, у вас нет достаточной квалификации (как впрочем желания и, как вы сами сказали, времени) для этого занятия...

БИЗНЕС задача?!
я хочу сделать фильтр для dw grid и мне кажется логичным и удобым что если кто то введет(или на будет изначально) строку то ее можно распарсить в конструктор!
Ясно, хроник...
...
Рейтинг: 0 / 0
18.06.2009, 20:51
    #36049378
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбивка строки фильтра на выражения
Локшин МаркНапример знания того что приоритет у операций в DataWindow не совпадает с приоритетом в PowerScript'е...
Не просто не совпадает, а с разрывом мозга :)
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Разбивка строки фильтра на выражения / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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