Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2011, 09:58   #21
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Потерял суть вопроса.. и вникать некогда (да и целиком код не виден). но думаю, что это тактически неправильно - тут не нужен долгий цикл в цикле.
Смотрите - у Вас в словаре хранятся день & месяц и его номер в массиве b, а вероятно в другом словаре тоже самое с массивом c.
Тогда быстрее будет (по аналогии) создать под размер словаря b массив e, затем перебрать циклом словарь b и для каждой даты найти во втором словаре место пары в массиве c , и вот тогда уже сделать

Код:
u = u + 1
           e(u, 1) = (b(ii, 7) - c(iii, 7))
Т.е. будет один проход по словарю - найденные пары посчитаются, если пары нет - эти даты будут пропущены.
Быстро.

Или, если словарь один, связанный с массивом b, то можно циклом пройтись по массиву c, сверяя даты с словарём, т.е. сразу находим совпадения/несовпадения с b.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 26.09.2011 в 10:15.
Hugo121 вне форума Ответить с цитированием
Старый 26.09.2011, 14:02   #22
Dexter_M
Пользователь
 
Регистрация: 13.09.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
1. Читаем весь текст в массив, разбивая по строкам.
Тут вероятно может быть сложность, если файл будет уж очень большой, на сотни мегабайт. Но я с такими так не работал, поэтому точно не знаю.
Попробовал на большом файле (377 МБ), пишет "out of memory"...
Dexter_M вне форума Ответить с цитированием
Старый 26.09.2011, 14:11   #23
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Попробовал на большом файле (377 МБ)
Это надо было написать первой строкой в самом первом посте.
Для таких больших файлов применяются совсем другие алгоритмы
(вплоть до считывания частями)
Тут уж вам вряд ли бесплатно сделают решение.
(точнее, парни у нас молодцы, и не такое сделают, но имеет смысл вам их потом отблагодарить - ибо кода много получится)

Могут быть файлы ещё больше по объёму?
EducatedFool вне форума Ответить с цитированием
Старый 26.09.2011, 14:20   #24
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так я там ниже ведь писал:
Цитата:
Или можно вместо массива читать построчно непосредственно файл, хотя это вероятно будет медленнее, но как вариант при работе с огромным файлом (который трудно сразу весь запихнуть в память) вполне возможен.
Т.е. без массива - сразу анализируем строку и в массив кладём уже только результат анализа строки.
Если и так не поместится - тогда частями вероятно нужно, те, кто работал с такими огромными файлами точнее подскажут...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 26.09.2011, 14:24   #25
Dexter_M
Пользователь
 
Регистрация: 13.09.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Могут быть файлы ещё больше по объёму?
больше 400 МБ нет.

Не думал, что это так принципиально.
Тогда буду дробить файлы....
Dexter_M вне форума Ответить с цитированием
Старый 26.09.2011, 14:25   #26
Dexter_M
Пользователь
 
Регистрация: 13.09.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Т.е. без массива - сразу анализируем строку и в массив кладём уже только результат анализа строки.
Если и так не поместится - тогда частями вероятно нужно, те, кто работал с такими огромными файлами точнее подскажут...
Ясно, спасибо.
Попробую
Dexter_M вне форума Ответить с цитированием
Старый 26.09.2011, 14:34   #27
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот только как определить, какой массив будет нужен под результат...
При подходе с чтением файла в массив мы сразу имеем количество строк, а если читать построчно - то имеем только в конце.
Как сделать идеально - я не знаю.
Я один раз помню читал файл 2 раза - сперва просто подсчитывал количество строк, потом по этому количеству создавал нужный массив, потом снова читал файл уже с анализом строк.
Ещё есть вариант увеличивать массив динамически через Redim Preserve - но думаю на большом объёме будет тормозить.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 04.10.2011, 14:21   #28
Dexter_M
Пользователь
 
Регистрация: 13.09.2011
Сообщений: 29
По умолчанию

Еще раз спасибо, Ув. Hugo121!
Все сделал на основе Вашего кода...
В итоге разбил файл на несколько по одному признаку и поочередное считывание.
Dexter_M вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан динамический массив строк, вывести все слова начинающиеся с большой буквы C++ builder Memphi[s] Помощь студентам 0 02.03.2011 16:34
Большой объем данных matanga Microsoft Office Excel 4 09.12.2010 13:14
SQL - обьединение и управление несколькими базами данных MarinN SQL, базы данных 1 08.11.2010 10:09
Как виделить большой кусок памяти под массив? Tania Мультимедиа в Delphi 7 23.04.2010 01:53
Поиск min/max данных с несколькими условиями - нужна помощь! /nort/ Microsoft Office Excel 3 16.03.2008 00:13