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

ПО 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 просмотров
Пригласить эксперта
Ответы на вопрос 4
Zoominger
@Zoominger
System Integrator
Массив состоит из 100 элементов и 50000 строк.

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

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

Ну или напишите свой парсер и обвязку к "массиву", тогда сможете делать почти то же самое, но через одно место. В таком случае пользователь будет вводить что-то типа "!A1>2!A2=3", программа будет разбирать строку и делать нужные запросы. Можете почитать вот эту тему, лол: https://www.sql.ru/forum/708369/razrabotal-drayver...
Ответ написан
@kalapanga
Поддержу Рональд Макдональд. База данных здесь просится. Думаю, сгодится даже какой-нибудь SQLLite. И редактируем запросы как угодно.
Если же совсем по написанному задачу решать, то может что-то типа такого попробовать пристегнуть: https://www.remobjects.com/ps.aspx Но я этим не пользовался, ничего не гарантирую.
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
При использовании XLSReadWriteI можно хранить условия в текстовом файле и загружать через VBA Macros.
Ответ написан
Комментировать
@zedxxx
Есть варианты:
1. Рисуете гуй, чтобы он повторял максимальную комбинацию, как вы привели в примере. Т.е. для каждой позиции (условие N) даёте возможность выбрать переменную, с чем и как её сравнивать. Причём, делаете так, что поля были опциональные, т.е. чтобы некоторые можно было оставить пустыми.
Вот пример, как нечто похожее сделано в TheBat!
5cadd9d405df8651031116.png
2. Подключаете скриптовый язык (Lua или паскале-подобный DWScript, RemObjects PascalScript) и пишите простую инструкцию для пользователей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы