Как обойти ограничение на кол-во элементов в массиве?

  • Автор темы Karlosss
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

Karlosss

#1
Всем привет!
Тема про массивы. Идея такая. Есть некие текстовые файлы некой системы , которые я разбираю построково. В каждой строке есть запись, которая может повторяться в других строках. Задача. Надо посчитать уникальное кол-во таких записей в этих строках. То есть такая запись может повторится во всех строках 10,20.. и т.д. раз, но мы считаем как 1 раз.
Сделал через массивы. Но в массиве есть ограничение на кол-во элементов 32000.
Помогите обойти это ограничение. Спасибо.

Dim x() As String
Dim xx As Long
--------------------
Redim Preserve x(xx)
x(xx)=mm – добавляем в массив след. Элемент- запись из строки
xx=xx+1 - счетчик поднимаем на +1
-------------------
resultArr = Arrayunique(x,0) - массив уникальных значений
oo=Ubound(resultArr) - показывает уникальное кол-во записей в массиве.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#4
1) не 32'000, если мне память не изменяет, а в пределах integer: -32'768 ... 32'767 (включительно)
2) можно использовать массивы многомерные, например, массив одномерный 65'535 элементов, то двумерный 65'535*65'535 = 4'294'836'225 элементов

Код:
	-32'768	:	-32'768 ... 32'767
-32'767	:	-32'768 ... 32'767
...
0		:	-32'768 ... 32'767
...
32'766	:	-32'768 ... 32'767
32'767	:	-32'768 ... 32'767
 
K

Karlosss

#5
1) не 32'000, если мне память не изменяет, а в пределах integer: -32'768 ... 32'767 (включительно)
2) можно использовать массивы многомерные, например, массив одномерный 65'535 элементов, то двумерный 65'535*65'535 = 4'294'836'225 элементов

Код:
	-32'768	:	-32'768 ... 32'767
-32'767	:	-32'768 ... 32'767
...
0		:	-32'768 ... 32'767
...
32'766	:	-32'768 ... 32'767
32'767	:	-32'768 ... 32'767
1) Согласен, я просто не стал точно писать.
2) Думал об этом , но практически не знаю как это реализовать и потом не знаю так же как найти в двумерном (например) массиве кол-во уникальных элементов.

Щас покурю функцию list , может что и выйдет
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#7
Это не функция, а структурный тип данных.

Думал об этом , но практически не знаю как это реализовать и потом не знаю так же как найти в двумерном (например) массиве кол-во уникальных элементов
Да не особо сложнее, можно свой класс нарисовать, который позволит работать с таким массивом, как с одномерным, с размерностью в Long.
 
K

Karlosss

#9
:eek:fftop: а зачем оно в лотусях делается?
Дык база то в лотусе писана

Добавлено:
Это не функция, а структурный тип данных.


Да не особо сложнее, можно свой класс нарисовать, который позволит работать с таким массивом, как с одномерным, с размерностью в Long.


Если бы я мог рисовать классы в лотусе я бы такие глупые вопросы на форуме не писал
 

TIA

:-)
Lotus team
15.05.2009
790
3
#12
При большом объёме анализируемых данных ни List, ни массив, ни какой другой способ, запоминающий в памяти почти всё содержимое файлов не годится. Гораздо надёжнее работать непосредственно с файлом. Например так. Через первый файловый указатель считываем очередную строку. Вторым указателем проходим от начала файла до текущей позиции первого в поисках дубля. Как только нашли, поиск прерываем и счётчик не увеличиваем. Если не нашли, значит строка встретилась впервые счётчик увеличиваем.

Так мы сможем обработать любой по объёму файл. Количество проходов по файлу конечно увеличивается многократно, но не факт что будет медленнее, т.к. система не уйдёт в своп.
 
Статус
Закрыто для дальнейших ответов.