|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Товарищи, может кто то делал функцию разбивки призвольной строки фильтра на выражения. Из исходных параметров кроме строки фильтра есть нименования колонок и их типы. т.е. есть например с1=1 and c2='dakota' and c3>1000 в итоге должны получится отдельные выражения: с1=1 c2='dakota' c3>1000 и еще както бы записывать логические операции между выражениями?! Фильтр может быть сложным с функциями и скобками Может кто то уже такое делал?! спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 09:31 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Если хочется красиво, не поленитесь оформить интерфейс как в запросах Колонка|операнд|условие|скобки Любой другой вариант чаще всего предусматривает наличие спецсимвола для парсинга ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 12:02 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Я хочу вывести уже результат в удобный интерфейс! но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 12:34 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Ну так распарси произвольно по операторам and&or ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 13:51 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
dakota97Товарищи, может кто то делал функцию разбивки призвольной строки фильтра на выражения. Из исходных параметров кроме строки фильтра есть нименования колонок и их типы. т.е. есть например с1=1 and c2='dakota' and c3>1000 в итоге должны получится отдельные выражения: с1=1 c2='dakota' c3>1000 и еще както бы записывать логические операции между выражениями?! Фильтр может быть сложным с функциями и скобками Может кто то уже такое делал?! спасибо В большинстве случаев задача парсинга выражений лишняя. Ведь изначально например никакого фильтра нет - его строит пользователь. Поэтому достаточно, помимо применения фильтра, хранить его где-то в некоем простом для парсинга формате, например XML, в виде, удобном как для загрузки в визуальный редактор так и для сборки из него конечного выражения. Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
А текст фильтра получается путем последовательной конкатенации этих полей у все item'ов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 15:03 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky ...хранить его где-то в некоем простом для парсинга формате, например XML...По моему отличная идея. Только встает вопрос контроля правильности вводимых скобок - т.е. закрывающая скобка должна соответствовать открывающей и т.п. Тогда, быть может, имеет смысл нечто подобное ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Конечно - на вкус и цвет ... Но идея понравилась ! Good Luck ! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 17:08 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
ФилиппНу ваще нормальные люди просто на PFC смотрят. :-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 17:17 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
ФилиппФилиппНу ваще нормальные люди просто на PFC смотрят. :-)) Посмотрел - не то. PFC'шный построитель фильтра (стиль 1) не поддерживает модификацию предыдущего фильтра, а строит новый с нуля. А второй стиль вообще заставляет юзера работать напрямую с выражением фильтра. Хотя согласен, посмотреть стоит, хотя бы для того чтобы знать его возможности. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 19:48 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
ChVAnatoly Moskovsky ...хранить его где-то в некоем простом для парсинга формате, например XML...По моему отличная идея. Только встает вопрос контроля правильности вводимых скобок - т.е. закрывающая скобка должна соответствовать открывающей и т.п. Проверка соответствия скобок пишется в три строчки, прямо внутри того цикла что собирает выражение фильтра. Проверка правильности выражения в целом - в одну строчку: выполнить describe("evaluate (...) ") с фильтром для первой строки DW. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2009, 19:52 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, пользователь может создать фильтр или в моем конструкторе или в строке произвольно фильтра. Было бы здорово суметь распарсить все то что он ввел. PB ведь как то парсит!?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2009, 09:39 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Чтобы писать парсеры, неплохо бы знать теорию. Например, наиболее известное прочитать. Но Вам же, как всегда, охота чтобы за вас кто-то это сделал, разжевал и в рот положил... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2009, 10:11 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Локшин МаркЧтобы писать парсеры, неплохо бы знать теорию. Например, наиболее известное прочитать. Но Вам же, как всегда, охота чтобы за вас кто-то это сделал, разжевал и в рот положил... опять двадцать пять!!! Жаль что враг у меня здесь появился. Марк, мне я действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты. Если рассуждать как вы, то надо на ассемлере делать все не пользуя чужие финкции. Спасибо конечно за литературу но мне ее читать некогда, поэтому я и здесь. И перестаньте тыкать меня "мордой" в книги! Здесь много людей, которые готовы поделиться опытом и знаниями, на них и надесь. Нормальное обсуждение вроде, что вам не нравится то?!можно и поглупее вопросы на форуме найти и до них докапаться!? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2009, 11:34 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
dakota97Anatoly Moskovsky, пользователь может создать фильтр или в моем конструкторе или в строке произвольно фильтра. Было бы здорово суметь распарсить все то что он ввел. PB ведь как то парсит!?:) PB далеко не все запросы умеет переводить из синтаксической формы в графическую. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2009, 12:51 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
dakota97 действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты. Сама идея писать какие то парсеры на РВ - глубоко порочна. Вы может всё таки поясните ЗАЧЕМ вам эта "функция разбивки призвольной строки фильтра на выражения", какова БИЗНЕС задача, которую вы пытаетесь решить? Или вы решаете чисто техническую задачу (пишете базовые классы, framework какой-то)? В таком случае вы занимаетесь не своим делом, у вас нет достаточной квалификации (как впрочем желания и, как вы сами сказали, времени) для этого занятия... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2009, 19:42 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
авторЯ хочу вывести уже результат в удобный интерфейс! но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали Я бы хранил строку фильтра и результат деятельности конструктора раздельно. Если фильтр набран в конструкторе - храним XML для конструктора и строку фильтра. В интерфейсе конструктора предусмотрел бы возможность перехода в "ручной" режим ввода фильтра, при этом конструктор отключается и хранится только набранная строка фильтра. Для уже имеющихся фильтров набранных вручную конструктор не работает, работает ручной режим. Простые фильтры можно было бы переводить в конструктор по запросу юзера, но без гарантии получения того же результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 00:48 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
dakota97Я хочу вывести уже результат в удобный интерфейс! но сначала мне нужно распарсить эту строку фильтра, в ней нет спец символов, ее ведь не я делал, может ее в произвольном виде в тексте набрали да и все а не в моем конструкторе создали Попробуйте оттолкнуться от уже подобного - это конструирование "where" в DW. Там и принцип (включая вложения) и интерфейс вполне удовлетворительный. А главное на мой взгляд, это то (как говорит "Anatoly Moskovsky": ...В большинстве случаев задача парсинга выражений лишняя. Ведь изначально например никакого фильтра нет - его строит пользователь...), что фильтра вначале нет, его только строят, а значит и парсить нечего. Ну, а если всёже фильтр изначально есть и он не Ваш, то засунуть его в конструктор типа "where" в DW будет практически не возможно. Да и задача выглядит что-то типа: "да я даже SQL запроса не знаю, не то чтобы ещё фильтра и т.д.". Но всегда (и даже в этом случае) есть вариант, например отсечь из SQL запроса конструкцию "WHERE" и иметь её как "базу фильтра", к которой пользователь через "AND" подсоединяет уже всё остальное используя Ваш интерфейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 00:58 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Филиппdakota97 действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты. Сама идея писать какие то парсеры на РВ - глубоко порочна. Вы может всё таки поясните ЗАЧЕМ вам эта "функция разбивки призвольной строки фильтра на выражения", какова БИЗНЕС задача, которую вы пытаетесь решить? Или вы решаете чисто техническую задачу (пишете базовые классы, framework какой-то)? В таком случае вы занимаетесь не своим делом, у вас нет достаточной квалификации (как впрочем желания и, как вы сами сказали, времени) для этого занятия... БИЗНЕС задача?! я хочу сделать фильтр для dw grid и мне кажется логичным и удобым что если кто то введет(или на будет изначально) строку то ее можно распарсить в конструктор! я понял что никто этого не делал и вообще это почти невозможно! форму XML буду пользовать! всем спасибо за ответы ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 01:48 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
dakota97я понял что никто этого не делал и вообще это почти невозможно! Почему же, парсер как раз можно написать. Я вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу. После этого вам останется преобразовать дерево в набор строк для конструктора фильтра. Еще за 500 долл могу и это сделать. Так что если надумаете - вы знаете как меня найти. :) форму XML буду пользовать! Кстати, если фильтр этот не требуется сохранять между запусками приложения, то вместо XML удобнее использовать просто массив структур или даже просто Datastore аналогичного формата, чтобы исключить ненужную сериализацию в формат XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 02:25 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЯ вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу. Такая разница достигается за счет использования чего-нибудь типа YACC? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 08:36 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Локшин МаркAnatoly MoskovskyЯ вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу. Такая разница достигается за счет использования чего-нибудь типа YACC? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 12:06 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЛокшин МаркAnatoly MoskovskyЯ вот за каких-то 500 долл и 5 дней могу написать на PB LL-парсер выражений DW (подмножество допустимое в фильтре DW) на выходе которого синтаксическое дерево. А на С++(в виде DLL) так вообще за день напишу. Такая разница достигается за счет использования чего-нибудь типа YACC? Да. Все же мне кажется что только на выяснение всех особенностей разбора в DataWindow\проверки того что получилось уже больше дня уйдет... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 13:30 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Локшин МаркВсе же мне кажется что только на выяснение всех особенностей разбора в DataWindow\проверки того что получилось уже больше дня уйдет... Да ладно, все уже давно выяснено за 12 лет :) Кроме того, задача парсинга, в отличие от задачи вычисления, не требует разбора особенностей работы DW. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 14:41 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyКроме того, задача парсинга, в отличие от задачи вычисления, не требует разбора особенностей работы DW. Например знания того что приоритет у операций в DataWindow не совпадает с приоритетом в PowerScript'е... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 17:13 |
|
Разбивка строки фильтра на выражения
|
|||
---|---|---|---|
#18+
dakota97Филиппdakota97 действительно ищу того кто бы"разжевал и в рот положил" потому как сам я этот парсер написать не могу но возможно уже есть варианты. Сама идея писать какие то парсеры на РВ - глубоко порочна. Вы может всё таки поясните ЗАЧЕМ вам эта "функция разбивки призвольной строки фильтра на выражения", какова БИЗНЕС задача, которую вы пытаетесь решить? Или вы решаете чисто техническую задачу (пишете базовые классы, framework какой-то)? В таком случае вы занимаетесь не своим делом, у вас нет достаточной квалификации (как впрочем желания и, как вы сами сказали, времени) для этого занятия... БИЗНЕС задача?! я хочу сделать фильтр для dw grid и мне кажется логичным и удобым что если кто то введет(или на будет изначально) строку то ее можно распарсить в конструктор! Ясно, хроник... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2009, 18:59 |
|
|
start [/forum/moderation_log.php?user_name=%D0%9D%D0%B5+QT]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 435ms |
total: | 591ms |
0 / 0 |