Пример алгоритма чистки (перебора) ассоциативных индексов



Posted by Рустем Мухаметшин on July 28, 1999 at 11:02:01:

In Reply to: Re: Есть решение posted by Александр,Киев. on July 28, 1999 at 05:55:30:

    Ассоциативные индексы это мощный инструмент, который позволяет существенно упростить алгоритм. К тому же, до недавнего времени это была единственная реализация вообще всех массивов (в том числе числовой индексации). Среди проблем работы следует отметить основную -   проблему перебора элементов (в нашем случае для очистки/инициализации, в некоторых случаях для других целей). После некоторго опыта написаня форм в ФБП и построения ассоциативных таблиц результатов поиска по ленте фактов, я пришел к необходимости унифицировать данный алгоритм и теперь применяю его в любом случае, вне зависимости от сложности самого алгоритма формы. Это позволяет облегчит написание форм и что немало важно их дальнейший разбор (после нескольких месяцев). Вот болванка-пример использующая последние новшества интерпретатора.
* Start of form
* Первичная инициализация и подготовка
...
* Переход к циклу генерации ассоциативного массива
NI=0       Общее кол-во индексов ассоциативного массива
:next
search Нужные данные по индексу ?A и индексу ?B сумма ?S
  If [success]=0
    GoTo end
  EndIf
* Производим отбор и классификацию. Ненужные пропускаем переходом на next
  ID=A+'|'+B
  Call RegID (ID)
  [plus ID,S]
GoTo next
:end
* Используем данные
...
* Производим чистку
For I=0 To NI
  ID=[i I]
  [set ID+'|F', 0];[set ID,0]
EndFor
Stop
***************************************
*
:RegID (ID)   Подпрограмма используется потому, что, зачастую, регистрировать индексы приходится в нескольких местах алгоритма
*
***************************************
R =ID+'|F'
If [get R]=0
  [set R, 1]
  NI=NI+1;[i NI, ID]
EndIf
Return
* End of form

    Безусловно Васеленко Сергей прав в части возможного аварийного останова формы. Тогда сброса индексов не произойдет. Но,
1) на то он и аварийный. Делайте   P MC=MC
2) Сбрасывать индексы в начале зачастую нет возможности потомукак заранее неизвестен их количественный и качественный состав - на то они и ассоциативные.
3) Конечно было бы хорошо если бы сервер сам готовил входное состояние формы. Но э-п % хранятся в общем контексте и сбрасывать их проблематично.


Пpишедшие ответы: