Пусть системная переменная sysvar содержит список с разделителем "," , состоящий из лексем-идентификаторов: Fdc,IH,_K4R,J7,_L876 ... Необходимо из этого списка удалить идентификаторы, начинающиеся с символа '_'. Для длинных списков работа с аппаратом лексем в системной переменной может занять значительное время, поэтому здесь предпочтительно использовать работу с системным списком. Для этой цели организуем цикл с использованием граничных контекстов:
Контекст поиска: | Контекст замены: |
---|---|
==================================================================== | |
<!> | #[BlockList(ldlexm,sysvar,syslist,,",")] |
Загрузка системного списка syslist из системной переменной sysvar; | |
<!>repeat | #[BlockList(lcount,syslist,sysvar1)] |
Запись числа элементов списка в системную переменную sysvar1 - формирование счетчика цикла; | |
<!> | #[BlockList(lgetstr,syslist,sysvar2,sysvar1); BlockFind(postxt,sysvar2,sysvar3,"_")] |
Чтение из системного списка syslist в системную переменную sysvar2 элемента с индексом sysvar1 и поиск в нем вхождения контекста "_" (номер начала позиции найденного контекста заносится в sysvar3 ; | |
<!>|[sysvar3=1]| | #[BlockList(ldel,syslist,,sysvar1)] |
Контроль символа "_" в первой позиции идентификатора и при удовлетворении условия удаление ячейки c номером sysvar1 из системного списка syslist; | |
<!>until|[sysvar1-1=0 :: else]| | #[:: sysvar1-1//sysvar1] |
Контроль счетчика цикла sysvar1 на достижение индекса списка равного 1, иначе уменьшение счетчика на 1; | |
<!> | #[BlockList(svlexm,sysvar,syslist,,","] |
Выгрузка системного списка syslist в системную переменную sysvar с разделителем ","; | |
==================================================================== |