понедельник, 18 марта 2019 г.

MiniM. Как в списке удалить или вставить элементы

Вопрос. Если есть список полученный с помощью $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 можно найти в документации MiniM Database Server, нужно обратить внимание на описание параметров position и end.

Комментариев нет:

Отправить комментарий