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

Тема в разделе "Lotus - Программирование", создана пользователем Karlosss, 19 июл 2010.

Статус темы:
Закрыта.
  1. Karlosss

    Karlosss Гость

    Всем привет!
    Тема про массивы. Идея такая. Есть некие текстовые файлы некой системы , которые я разбираю построково. В каждой строке есть запись, которая может повторяться в других строках. Задача. Надо посчитать уникальное кол-во таких записей в этих строках. То есть такая запись может повторится во всех строках 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) - показывает уникальное кол-во записей в массиве.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    List заюзайте
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    +1
     
  4. Akupaka

    Akupaka А че я?.. О.о

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

    Код (LotusScript):
        -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
     
  5. Karlosss

    Karlosss Гость

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

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

    Darker Гость

    Проверяй на IsElement
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Это не функция, а структурный тип данных.

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

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    :) а зачем оно в лотусях делается?
     
  9. Karlosss

    Karlosss Гость

    Дык база то в лотусе писана

    Добавлено:


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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А что мешает? )) Учись, пригодится.
     
  11. Karlosss

    Karlosss Гость

    а я что? учусь вот...
    не все сразу
     
  12. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    При большом объёме анализируемых данных ни List, ни массив, ни какой другой способ, запоминающий в памяти почти всё содержимое файлов не годится. Гораздо надёжнее работать непосредственно с файлом. Например так. Через первый файловый указатель считываем очередную строку. Вторым указателем проходим от начала файла до текущей позиции первого в поисках дубля. Как только нашли, поиск прерываем и счётчик не увеличиваем. Если не нашли, значит строка встретилась впервые счётчик увеличиваем.

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей