Список названий полей ассоциативного массива
В QPILE имеется 2 вида агрегатных данных - ассоциативный массив и коллекция. Пробежаться по всем элементам коллекции просто - нужно перебрать все ее значения от начального до последнего. А можно ли это сделать со всеми элементами ассоциативного массива?
Да. Можно. Причем это можно сделать для ассоциативного массива произвольной структуры.
Ассоциативный массив в QPILE имеет представление в виде текстовой строки с символьными разделителями. Зная структуру представления ассоциативного массива разобрать его структуру не представляет труда. Вот текст простейшего портфеля, который иллюстрирует происходящее.
Сначала просто создадим ассоциативный массив любой структуры, после чего найдем в нем все названия полей. Я создал массив из двух полей. Можно создать любой, в том числе содержащий в качестве полей другие массивы или коллекции. Ассоциативный массив получил имя a.
PROGRAM
a = create_map()
a = set_value(a,"AAA",1)
a = set_value(a,"BBB","xxx")
' А сейчас находим все поля в ассоциативном массиве и выводим их в файл
for stx from 0 to stx
result = find(a,stx,"=SOH")
if result == -1
break
end if
result = substr(a,stx,result-stx)
if get_value(a,result) != ""
writeln("t.txt",result)
end if
stx = find(a,stx,"STX")
end for
END_PROGRAM
Что за символы такие SOH и STX, что выделены фоном? Это символы - разделители, которые используются в формате хранения. Они имеют коды соответственно 01 и 02. Обычным способом их с клавиатуры ввести невозможно. Чтобы их указать, небходимо при нажалой клавише Alt на дополнительной цифровой клавиатуре нажать последовательно кнопки 0 и 1 для символа SOH, для символа STX - 0 и 2. При этом нужно использовать текстовый редактор, который эти символы не станет фильтровать. Я использую Notepad++. В других редакторах эти символы могут отображаться в виде рожиц ( белой и чёрной) или как-то иначе. В результате выполнения нашего портфеля в файле T.TXT будут находиться 2 строки AAA и BBB - названия полей исходного ассоциативного массива. При желании на основании этого примера нетрудно написать функцию, которая бы возвращала в той или иной форме (список / массив / коллекция) ключи исходного ассоциативного массива.
Комментарии
Вместо: result = find(a,stx,"=SOH")
пишем result = find(a,stx,"SOH ")
вместо: result = substr(a,stx,re sult-stx)
пишем : result = substr(a,stx,re sult-stx-1)
RSS лента комментариев этой записи