powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Parser строки sql where
16 сообщений из 66, страница 3 из 3
Parser строки sql where
    #39114342
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: c#
1.
2.
3.
4.
5.
            String str = @"(TEST1 = 111 OR TEST1 = 222) AND (POST1 = 555)";
            String[] words = str.Split(new Char[] {' ', '(', ')'});
            for (Int32 i = 1; i < words.Length - 1; i++) {
                if (words[i].Equals("=")) Console.WriteLine("{0}={1}", words[i - 1], words[i + 1]);
            }


Самое лучшее решение ))) Все остальное - мозголомное баловство
...
Рейтинг: 0 / 0
Parser строки sql where
    #39114412
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Самое лучшее решение ))) Все остальное - мозголомное баловство
Спасибо, КЭП!
...
Рейтинг: 0 / 0
Parser строки sql where
    #39114511
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Самое лучшее решение ))) Все остальное - мозголомное баловство
так и скажи - формальные грамматики и синтаксический разбор - не осилил
...
Рейтинг: 0 / 0
Parser строки sql where
    #39114569
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Самое лучшее решение ))) Все остальное - мозголомное баловство
так и скажи - формальные грамматики и синтаксический разбор - не осилил

Не-а, не осилил. Так и думал, что для жестко заданного формата строки нужно обязательно "формальные грамматики и синтаксический разбор"
...
Рейтинг: 0 / 0
Parser строки sql where
    #39115980
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем два варианта, которые выполняют поставленную задачу.
Строка может быть разной, эту строку я привил для примера. А так может быть все что угодно.
Код: c#
1.
'(TEST1 = 111 OR TEST1 = 222) AND (RAZ = 'Тип емкости') AND (BIZ_D = 24.7) AND (DATER = '01.01.2015')'


Dima T
Код: c#
1.
2.
3.
4.
5.
            String str = @"(TEST1 = 111 OR TEST1 = 222) AND (POST1 = 555)";
            String[] words = str.Split(new Char[] {' ', '(', ')'});
            for (Int32 i = 1; i < words.Length - 1; i++) {
                if (words[i].Equals("=")) Console.WriteLine("{0}={1}", words[i - 1], words[i + 1]);
            }

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
const string str = @"(TEST1 = 111 OR TEST1 = 222) AND (POST1 = 555)";
var rx = new Regex(@"\((.*?)\)");
var smt = rx.Matches(str)
     .OfType<Capture>()
     .Select(s => s.Value.Replace("(", "").Replace(")", "").Split(new[] {"OR", "="}, StringSplitOptions.None))
     .Select(s => new { key = s[0].Trim(), value = s })
     .Select(s => new { s.key, value = s.value.Where(w => !s.key.Trim().Contains(w.Trim())).Select(sm => sm.Trim()).ToArray() })
     .Select(s => new { s.key , s.value })
     .ToList();
...
Рейтинг: 0 / 0
Parser строки sql where
    #39115981
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Parser строки sql where
    #39116318
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще не утомились? Какие выносливые и упрямые :)
...
Рейтинг: 0 / 0
Parser строки sql where
    #39116329
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

не мытьём так катанием!
...
Рейтинг: 0 / 0
Parser строки sql where
    #39117996
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleron,
Вам есть что предложить?
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118004
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoСтрока может быть разной
Ну правильно - нахрена об этом сразу говорить? Я в самом конце скажу. :) Молодец, автор!
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118055
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Так и думал, что для жестко заданного формата строки нужно обязательно "формальные грамматики и синтаксический разбор"
а что, есть описание "жёстко заданного формата"?
если нет - остаётся предположить некое подмножество ANSI SQL
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118269
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoAxeleron,
Вам есть что предложить?
Мне предложить нечего, я велосипеды не пишу.
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118271
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoAxeleron,
Вам есть что предложить?
Но, чтобы не захламлять, я сразу сказал по сути 18470999
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118351
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Так и думал, что для жестко заданного формата строки нужно обязательно "формальные грамматики и синтаксический разбор"
а что, есть описание "жёстко заданного формата"?
если нет - остаётся предположить некое подмножество ANSI SQL

Да не, я то ориентировался на утверждение ТС, что строка фиксированного формата, а оказывается - что нет.
Так что без анализа строки не обойтись ))) А там такое замудрить можно...
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118362
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Да не, я то ориентировался на утверждение ТС, что строка фиксированного формата
и ты повёлся
...
Рейтинг: 0 / 0
Parser строки sql where
    #39118400
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,

А откуда берется сам запрос, который надо парсить?
Я подозреваю - что он генерируется на основе данных формы. Причем генератор не слишком умный и замысловатые конструкции вроде exists не вставляет. Так почему бы не допилить генератор, чтобы он откладывал доп-условия в сторонку.

В целом согласен с предшествующими участниками дискуссии. оно конечно написать нисходящий разбор узкого подмножества SQL можно.... если точно знать все ограничения. Например - select из одной таблицы или из многих, в качестве условий - равенства полю константе или более сложные выражения, и т д.
...
Рейтинг: 0 / 0
16 сообщений из 66, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Parser строки sql where
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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