Задать вопрос

Как организовать отбор данных по условию?

ПО RAD Studio 10.1 Berlin.
Всё работает, но нужно изменить код. А именно каким либо образом вынести условие из кода во внешний файл, для возможности его изменения. Пока же условие "вшито" в программу.

Смысл программы - есть двумерный массив, который надо отфильтровать. (Своего рода таблица - упрощенно.)
Массив состоит из 100 элементов и 50000 строк.
Фильтрация осуществляется по первым 5-6 полям.
Условия фильтрации равно, не равно, содержит, и, или.
Условие совпало - нет ошибки, строка массива проходит. И всё это сейчас в коде программы.
Но условия меняются. Как их значения, так иногда и логика - последовательность.

Пример
if ((A1='1') and (CountPos('A13.29',A2)>0) and (A3='73') and (A4='97') and (A5='3')) then error:=0;

CountPos - функция поиска содержимого (содержит).

А завтра может быть нужно
if ((A1='222') and (CountPos('A13.29',A2)>0) or (A3='73') and (A4!='97') and (A5='3')  and (A5<>'4')) then error:=0;


Что не меняется.
Названия переменных A1, A2...A6.
Их максимальное количество - 6, т.е. A7 никогда не будет в коде.
Вид условий.
Внутри скобок, до ОПЕРАТОР не более 3х.
Всего комбинаций "троек" условий не более 4х.
if (
((условие 1) оператор (условие 2) оператор  (условие 3)) ОПЕРАТОР 
((условие 1) оператор (условие 2) оператор  (условие 3))  ОПЕРАТОР 
((условие 1) оператор (условие 2) оператор  (условие 3))  ОПЕРАТОР 
((условие 1) оператор (условие 2) оператор  (условие 3))
) then begin end;


Как организовать отбор данных по условию?
Мысли идеи?
  • Вопрос задан
  • 157 просмотров
Подписаться 1 Средний 2 комментария
Ответ пользователя Рональд Макдональд К ответам на вопрос (4)
Zoominger
@Zoominger
System Integrator
Массив состоит из 100 элементов и 50000 строк.

Из 100 элементов или столбцов?

Не совсем понятно, почему это массив, если это должно быть базой данных, но дельфистам можно.
Хотя нет, нельзя. Загоняйте данные в какой-нибудь MySQL и делайте к ней интерфейс, тогда любые запросы можно будет делать легко и просто.

Ну или напишите свой парсер и обвязку к "массиву", тогда сможете делать почти то же самое, но через одно место. В таком случае пользователь будет вводить что-то типа "!A1>2!A2=3", программа будет разбирать строку и делать нужные запросы. Можете почитать вот эту тему, лол: https://www.sql.ru/forum/708369/razrabotal-drayver...
Ответ написан