Re: Может это можно ... по-другому? НУЖНО!!!



Posted by Аркадий Водяник (195.206.226.9) on February 05, 2001 at 08:25:36:

In Reply to: Может это можно сделать как-то по-другому? posted by Андрей Завгородний, ООО Сокол-2 on February 05, 2001 at 04:33:23:


: Тогда подскажите как решить следующую проблему.
: Я ищу факты по начислению зарплаты за весь год.
: И чтобы люди не повторялись, я уже найденных людей записываю в строку с разделителем '\', а затем сравниваю параметр имени в найденном факте с этой строкой. Если такая подстрока уже имеется в строке, то ищу следующий факт. И получается что длина строки очень быстро превышает 255 символов и начинаются глюки.
: Может это можно сделать как-то по-другому?

Где можно хранить промежуточные данные в ФБП ?

1) В обычных массивах (array)
---В ассоциативных массивах:
2) В строках - так, как это делаете Вы, находя
подстроки;
3) В фактах (это неприемлемо для форм, где нельзя
породить факт; для файлов-коэффициентов - можно);
4) В экстрапараметрах (функции [set...] и [get...]);
5) В дисковой базе - функции [sed...] и [ged...].

Каковы ограничения для этих способов хранения?

1) Для array - 1000,000; Но требуется либо поиск
элемента прямым сканированием, либо дополнительная
кодировка и дополнительный массив (искусственное
для ФБП индексирование);

2) 255 / n, где 255 - предельная длина строки,
n - средняя длина имени человека
плюс разделитель;

3,4,5) - ограничения обусловлены только доступной
RAM; для 5) - еще и местом на диске.

Приведу пример.
Конечно, я не знаю в точности Вашей задачи.
Воспроизведу по Вашим словам;
Предположим, все происходит в форме,
а не файле-коэффициенте - отсюда и счет % в
функциях [get...] и [set...]:


:loop
search Начисление ?P ...
if [success]
if [get %, P] = 0 с этой персоной еще не
встречались
(делаю что надо...)
[set %, P, 1] указываю, что с этой персоной
* уже имели дело
endif
goto loop
endif
array % освобождаю занятую э/п память





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