powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Разбивка строки фильтра на выражения
25 сообщений из 25, страница 1 из 1
Разбивка строки фильтра на выражения
    #36042699
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, может кто то делал функцию разбивки призвольной строки фильтра на выражения. Из исходных параметров кроме строки фильтра есть нименования колонок и их типы.
т.е. есть например с1=1 and c2='dakota' and c3>1000
в итоге должны получится отдельные выражения:
с1=1
c2='dakota'
c3>1000
и еще както бы записывать логические операции между выражениями?!
Фильтр может быть сложным с функциями и скобками
Может кто то уже такое делал?!
спасибо
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36043108
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хочется красиво, не поленитесь оформить интерфейс как в запросах
Колонка|операнд|условие|скобки
Любой другой вариант чаще всего предусматривает наличие спецсимвола для парсинга
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36043220
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хочу вывести уже результат в удобный интерфейс!
но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36043509
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так распарси произвольно по операторам and&or
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #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
Разбивка строки фильтра на выражения
    #36044220
Фотография 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
Разбивка строки фильтра на выражения
    #36044255
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппНу ваще нормальные люди просто на PFC смотрят. :-))
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36044585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппФилиппНу ваще нормальные люди просто на PFC смотрят. :-))
Посмотрел - не то.
PFC'шный построитель фильтра (стиль 1) не поддерживает модификацию предыдущего фильтра, а строит новый с нуля. А второй стиль вообще заставляет юзера работать напрямую с выражением фильтра.
Хотя согласен, посмотреть стоит, хотя бы для того чтобы знать его возможности.
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36044593
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChVAnatoly Moskovsky ...хранить его где-то в некоем простом для парсинга формате, например XML...По моему отличная идея. Только встает вопрос контроля правильности вводимых скобок - т.е. закрывающая скобка должна соответствовать открывающей и т.п.
Проверка соответствия скобок пишется в три строчки, прямо внутри того цикла что собирает выражение фильтра.
Проверка правильности выражения в целом - в одну строчку: выполнить describe("evaluate (...) ") с фильтром для первой строки DW.
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36045095
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky, пользователь может создать фильтр или в моем конструкторе или в строке произвольно фильтра. Было бы здорово суметь распарсить все то что он ввел. PB ведь как то парсит!?:)
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36045160
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы писать парсеры, неплохо бы знать теорию. Например, наиболее известное прочитать. Но Вам же, как всегда, охота чтобы за вас кто-то это сделал, разжевал и в рот положил...
...
Рейтинг: 0 / 0
Разбивка строки фильтра на выражения
    #36045480
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Локшин МаркЧтобы писать парсеры, неплохо бы знать теорию. Например, наиболее известное прочитать. Но Вам же, как всегда, охота чтобы за вас кто-то это сделал, разжевал и в рот положил...

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

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

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

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

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


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

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

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


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