Вопрос. Если есть список полученный с помощью $listbuild(), то как в нем вставить другие элементы в заданной позиции или удалить элементы из заданной позиции? Как взять подсписок из списка?
Ответ. Эти операции выполняет трехаргументная форма функции $list().
Удалить элемент в позиции N:
s $list(list,N,N)=""Например:
USER>s list=$lb(1,2,3,4) USER>s $li(list,2,2)="" USER>f i=1:1:$ll(list) w $lg(list,i,"undef"),! 1 3 4Удалить элементы с позиции N до позиции M включительно:
s $list(list,N,M)=""Например:
USER>s list=$lb(1,2,3,4) USER>s $li(list,2,3)="" USER>f i=1:1:$ll(list) w $lg(list,i,"undef"),! 1 4Заменить элементы с N по M на один элемент val:
s $list(list,N,M)=$lb(val)Например:
USER>s list=$lb(1,2,3,4) USER>s $li(list,2,3)=$lb(5) USER>f i=1:1:$ll(list) w $lg(list,i,"undef"),! 1 5 4Вставить вместо элементов начиная с N по M несколько значений val1,val2,...
s $list(list,N,M)=$lb(val1,val2,...)Например:
USER>s list=$lb(1,2,3,4) USER>s $li(list,2,3)=$lb(5,6,7,8) USER>f i=1:1:$ll(list) w $lg(list,i,"undef"),! 1 5 6 7 8 4Чтобы вставить элементы в список без замещения, а раздвинув список, нужно использовать операцию замещения, предварительно взяв замещаемый элемент. Например:
USER>s list=$lb(1,2,3,4) USER>s $list(list,2,2)=$lb(5,6,$li(list,2)) USER>f i=1:1:$ll(list) w $lg(list,i,"undef"),! 1 5 6 2 3 4Как взять подсписок начиная с позиции N до позиции M включительно:
$list(list,N,M)Например:
USER>s list=$lb(1,2,3,4) USER>s li=$li(list,2,3) USER>f i=1:1:$ll(li) w $lg(li,i,"undef"),! 2 3Чтобы взять подсписок до последнего элемента включительно нужно в третьем аргументе указать значение -1, например:
USER>s list=$lb(1,2,3,4) USER>s li=$list(list,2,-1) USER>f i=1:1:$ll(li) w $lg(li,i,"undef"),! 2 3 4В случае если номера позиций выходят за пределы существующих в списке элементов, то функция $list автоматически проводит дополнение списка пустыми позициями. Например:
USER>s list=$lb(1,2,3,4) USER>s $li(list,8,9)=$lb(5,6,7) USER>f i=1:1:$ll(list) w $lg(list,i,"undef"),! 1 2 3 4 undef undef undef 5 6 7Более подробное описание применения трехаргументной формы $list можно найти в документации Cache', нужно обратить внимание на описание параметров position и end. При локально установленной Cache ссылка на документацию:
http://127.0.0.1:1972/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_flist
Комментариев нет:
Отправить комментарий