Фильтрация таблиц

Реализация на QPILE+M4.

 

dnl Фильтрация произвольной таблицы QUIK по значению столбца.
dnl Сравнение идет по символьному представлению
dnl Возвращает коллекцию ассоциативных массивов, каждый из которых есть
dnl одна из отфильтрованных строк
dnl Если MaxSize > 0, фильтрация прекращается при нахождении MaxSize строк.
dnl Поиск по строкам идет снизу вверх.
dnl В полученной коллекции порядок следования строк совпадает с их порядком в исходной таблице.
dnl Соответствующая таблица в терминале должна быть открыта.

Func Filter_Table(Table_Type,Column_Identifier,Value,MaxSize)
  Local(i,Item)

  Value = String(Value)
  result = Create_Collection()

  for i from -get_number_of(Table_Type) to -1
     Item = get_item(Table_Type,-i)
     if Value == get_value(Item,Column_Identifier)
           result = New_Collection_Item(result,Item)
     end if
     Until(Between(MaxSize,1,get_collection_count(result)) == True)
  end for

EndFunc(result)

Все вызываемые функции есть макросы, написанные на языке препроцессора M4. Большинство из них можно найти на этом сайте.

Добавить комментарий


Защитный код
Обновить