Что нового

Пользовательський конструктор Select... Case, как реализовать?

konokrad666

Новичок
Сообщения
22
Репутация
0
Есть функция, на входе она получает идентификатор и массив параметров, на основании этих параметров она возвращает категорию, к которой относится идентификатор. Нужно сделать, чтобы пользователь мог создавать/ редактировать/ удалять правила для категоризации. То есть написать скажем в .cfg или .ini файле
Код:
категория1={название параметра1/>=40/<50}{название параметра2/>=0}
категория2={название параметра1/>455/<50}{название параметра3/=88}{название параметра4/<>5}
категория3={else}
а функция на основании этих правил делает один Select и Case для каждой категории, с AND между параметрами. Но что то я не могу понять как в функции сделать произвольное количество Case (можно ограничить сверху, скажем, двадцатью) и вообще возможно ли это.
Пример того как есть сейчас, для конфига кажды раз нужно править исходники:

Код:
Func GetCategory($count, $itm)
   Local $category[2]
Select
        Case $count = 0 Then
	  $category[0] = "Категория 1"
	  $category[1] = IniRead($config_path, "labels", $category[0], -1)
	  return $category

	Case $count >= 250 And $count < 500 And $itm >= 52 Then
		 $category[0] = "Категория 1"
		 $category[1] = IniRead($config_path, "labels", $category[0], -1)
		 return $category

	Case $count >= 250 And $count < 500 And $itm < 52 Then
		 $category[0] = "Категория 3"
		 $category[1] = IniRead($config_path, "labels", $category[0], -1)
		 return $category

   Case Else 
		 $category[0] = "Категория 4"
		 $category[1] = IniRead($config_path, "labels", $category[0], -1)
		 return $category
EndSelect


Может быть есть библиотека для этого а я просто не могу найти?
 

cnm

Новичок
Сообщения
58
Репутация
2
Создаем массив.

в массиве поля
1. категория
2. минимальное значение первого параметра
3. максимальное значение певрго параметра
4. минимальное значение второго параметра
5. макксимальное значение второго параметра

Создаем функцию преобразования конфига в массив. (обработать знаки ><=)

Перебрать массив на соответсвие определнной категории.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
konokrad666 сказал(а):
как в функции сделать произвольное количество Case (можно ограничить сверху, скажем, двадцатью)
Можно мне как самому необразованному здесь, перевести значения этих слов?)
 
Автор
K

konokrad666

Новичок
Сообщения
22
Репутация
0
Создаем массив.

в массиве поля
1. категория
2. минимальное значение первого параметра
3. максимальное значение певрго параметра
4. минимальное значение второго параметра
5. макксимальное значение второго параметра

Создаем функцию преобразования конфига в массив. (обработать знаки ><=)

Перебрать массив на соответсвие определнной категории.
В этих случаях разве сработает?
{название параметра2/=0}
{название параметра4/<>5}

+ мы не знаем количество и порядок следования параметров, мин макс и просто например ">0"

Можно мне как самому необразованному здесь, перевести значения этих слов?)
Я имел ввиду возможность добавить произвольное количество правил, для определения категории) Реализовать не обязательно через Select... Case, я просто не могу придумать другой путь.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
konokrad666 [?]
Я имел ввиду возможность добавить произвольное количество правил, для определения категории)
Не забывай, что ячейкой массива может быть иной массив.

Если же тебе нужен пример, то это в стол заказов. На деле все реализуется просто.
 

cnm

Новичок
Сообщения
58
Репутация
2
1. можно добавить название параметра в массив.
Т.е. например 1 нас есть 20 параметров

тогда массив будет выглядеть так

1. категория
2. название параметра
3. минимальное значение первого параметра
4. максимальное значение певрго параметра
5. название параметра
6. минимальное значение второго параметра
7. макксимальное значение второго параметра

итд.

=0 реализуется как максимум=минимум=0

<> не реализуется.


минимум - это при >=
Максимум - это <=

при этом по дефолту максимум и минимум принимают максимальные и минимальное значение числа - чтобы правильно сработало условие.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
cnm [?]
1. можно добавить название параметра в массив.
Т.е. например 1 нас есть 20 параметров
тогда массив будет выглядеть так
1. категория
2. название параметра
3. минимальное значение первого параметра
4. максимальное значение певрго параметра
5. название параметра
6. минимальное значение второго параметра
7. макксимальное значение второго параметра
итд.
=0 реализуется как максимум=минимум=0
<> не реализуется.
минимум - это при >=
Максимум - это <=
при этом по дефолту максимум и минимум принимают максимальные и минимальное значение числа - чтобы правильно сработало условие.
Или создать в массиве категорий(на каждую) массив с условиями.
Зачем коверкать?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
ТС, Вам необходимо создать двумерный массив - матрицу, в которой столбцы это минимум и максимум по каждому из параметров, а строки это категории.
Тогда создавать/редактировать/удалять правила для категоризации - это предоставить пользователю возможность добавлять/удалять/редактировать строки в этой матрице.
Однако! Вам предстоить решить задачу контроля непересекаемости категорий при заведении их пользователем. Птому что если после введения всех правил один объект будет попадать сразу в несколько категорий, то начнётся неразбериха...
 
Верх