Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
to Андрей VG

Построчное считывание файла и занесение во временный словарь: 2 476 710 за 5 минут 47 секунд
Обновление пустого справочника 1 390 342 строчек за 4 мин 45 сек

Построчное считывание 2 файла: 2 025 113 за 4 мин 34 сек
Обновление справочника: 1 222 422 строчек за 7:38

При попытке сохранить словарь 2.5 млн строчек в файл, комп умирает. Сохраняется не более 1000 строк в минуту, как бы это ускорить?
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Цитата
Андрей VG написал:
P. S. А не поделитесь - сколько времени у вас уходит на поиск отсутствующих?
Завтра на работе запущу и отчитаюсь
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Прошу прощения что сразу не отвечал на вопросы. У меня Интернет на отдельной машине. Поэтому форум нет возможности читать регулярно.
На SQL Задача уже реализована давно и работает с очень быстрой скоростью, но мне нужно именно на Excel.  
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Также заметил что размер памяти при закрытии файлов и очистки вспомогательных словарей, уменьшается не сильно. Объем моего справочника 4.5 млн строк в среднем по 45 символов каждая, итого не более 200 Мб, а Эксель занимает около 1 ГБ, не пойму почему
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Реализовал свою идею через Словари. Скорость приемлемая, за исключением последнего шага. В котором я пытаюсь сохранить Словарь в файл. На меленьких файлах скорость приемлемая, но когда размер справочника 4 млн строк, а размер занимаемой памяти Excel около 1 Гб, сохранение идет очень долго - в минуту не более 1000 строк  :
Код
Public Sub ClosePensSprav(FileName As String)
Dim txtFile As TextStream
Dim TmpString As String
Dim Ndx As Long
Dim lLowVal As Long
Dim lHighVal As Long
Dim lStep As Long

    If Not (FSO.FileExists(FileName)) Then FSO.CreateTextFile (FileName)
    Set txtFile = FSO.OpenTextFile(FileName, ForWriting)
    
    lHighVal = PensSprav.Count
    lStep = CLng(lHighVal / 100)
    
    For Ndx = 0 To PensSprav.Count - 1

        lLowVal = Ndx
        If lLowVal Mod lStep = 0 Then Application.StatusBar = "Сохранение справочника:" & FSO.GetFileName(FileName) & ": " & sObrStr(lLowVal, lHighVal) & sSuff(CInt(lLowVal / lHighVal * 100))

        TmpString = PensSprav.Keys(Ndx) & "|" & PensSprav.Items(Ndx)
        txtFile.WriteLine (TmpString)
        DoEvents
    Next Ndx
    
    txtFile.Close
    Application.StatusBar = False
    Set txtFile = Nothing
    Set PensSprav = Nothing

End Sub
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Dmitryktm, спасибо, но это не вариант. Я не администратор своей машины, и тот человек кому я передаю программу тоже ничего не сможет установить.

Сейчас пробую вариант с коллекциями. Excel занял 1.2 ГБ оперативки. пока работает, Но я на 5 млн пробовал. В след месяцах (декабре и мае) могут быть двойные зачисления, тогда не знаю что будет  
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Получается если считывать в Коллекцию
Цитата
Андрей VG написал: почему нужно другому человеку отправлять исходные данные, чтобы он у себя в Excel их обрабатывал?
Данные никто никому не отправляет, другой человек сам их выгрузит из той же внешней системы

Цитата
Андрей VG написал: Проверка наличия ключа в словаре выполняется Dictionary.Exists(KeyValue) - словарь это пара ключ/значение.
Сейчас уже не вспомню, возможно я действительно проверял более "хитрым" способом (присваивание внутри on error)
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Цитата
StepanWolkoff написал: А версия Excel какая?
2010
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Спасибо всем ответившим, только я другие вопросы задавал. :-)
Через SQL задача уже реализована и работает, проблема в том, что это нужно передать другому человеку в другой город, у которого есть только Excel и Word

To HUGO: Вариант с заменой массивов словарем рабочий,  вопрос только на сколько это будет медленнее по скорости чем с массивами? И еще вопрос, помню как то работал со словарем и там был глюк, который я так и не смог обойти: При проверки наличия значения в словаре оно почему-то самопроизвольно добавлялось в этот словарь, я так и не смог до конца разобраться в проблеме посему так происходит?

PS На выгружаемый файл из внешней системы я никак повлиять не могу, считайте что мне его робот по почте присылает :-)
Импорт очень большого текстового файла (>10 млн строк, и объем около 2 ГБ)
 
Добрый день!

Подскажите, пожалуйста как оптимально по скорости/памяти решить следующую задачу:  

Имеются ежемесячные выгрузки из внешней системы, на которую я никак повлиять не могу.
Выгрузки представляют из себя текстовые файлы с разделителямя (зачисления).
Размер файла 1,5 - 2 ГБ и количество строк более 10 млн. Каждая строка = 1 зачисление , около 30 полей, из которых мне нужно только 5. (ФИО, Сумма, Дата операции, Дата рождения, тип зачисления) . Для одного клиента может быть несколько  зачислений (строчек).

Есть справочник клиентов (текстовый файл ~4 млн.записей), в котором хранятся только ФИО + Дата рождения

Мне необходимо из первого файла выбрать клиентов которые отсутствуют в справочнике и удовлетворяют определенным условиям. Таких ежемесячно бывает примерно 30-40 тыс. ФИО + ДР отобранных добавляем в справочник.

Соответственно,  чтобы решить данную задачу мне сейчас необходимо понять следующее:
1. Как правильно с точки зрения скорости/памяти считать текстовый файл в массив если я не знаю количество строчек в нем.Мне нужно будет в какой-то момент менять размерность массива, как это сделать лучше?

2. Прежде чем сравнивать массивы, по-любому придется их сортировать по полю ФИО. Подскажите пожалуйста самый быстрый алгоритм, который не использует вспомогательные массивы. Не хочется делать дополнительные копии массива в памяти.    
Обработка файлов *.msg
 
Спасибо, но я вроде решил свою проблему тем скриптом, который указал в последнем сообщении
- мерцание окон оказалось решается простым комментированием строки: openMsg.Display
В этой строке все сообщения выводились на экран, что мне совсем не нужно было.
А проблема с открытием Оутлук решилась стандартными приемами работы с объектами. Примерно так
Код
boolCloseOutlook = False
On Error Resume Next
Set OutlookApp = GetObject(, "Outlook.Application")
If OutlookApp Is Nothing Then
    Set OutlookApp = New Outlook.Application
    boolCloseOutlook = True
End If
On Error GoTo 0
Обработка файлов *.msg
 
Здесь нашел скрипт, который меня по большей части устраивает. Для его работы нужно добавить в Reference библиотеку Microsoft Outlook 14/15. Но при его использовании необходимо чтобы Outlook был открыт и открываемые окна Outlook мелькают на экране. Может быть как можно подправить эти моменты?  
Обработка файлов *.msg
 
К сожалению для Office 2010 объекты CDO не поддерживаются:
см.здесь
Обработка файлов *.msg
 
Добрый день!

  Помогите, пожалуйста, решить такую проблемку:
  В другой отдел по Outlook приходят каждый день 20-30 .xls файлов завернутых в RAR
  Раз в неделю девочка, которая получает эти файлы, выделяет все письма, сохраняет на диск, архивирует RAR  и присылает мне

 Чтобы не усложнять задачу, вложение RAR из Outlook на диск я скопирую ручками, остается такая матрешка;  RAR (  MSG  ( RAR ( XLS) ) )
 Как работать с RAR  в принципе понятно, но как их вытаскивать из  MSG, уже сохраненных на диске ?
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Обрабатываемые данные выгружаются в текстовые файлы из централизованной АС и на них я повлиять ни как не могу. А поскольку объем каждого из этих файлов может занимать 300-400 Мб по 500 тысяч строк и более, то вопрос с нехваткой памяти стоит достаточно остро, поэтому прежде чем добавить вспомогательный столбец, я 10 раз подумаю.
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Максим Зеленский, пытался осмыслить, что Вы написали. Действительно, если в исходном файле заменить в датах точку на слеш "/" , то все начинает работать. Похоже глюк VBA, в оболочке русификация отрабатывает отлично,  а в VBA нет.
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Цитата
JeyCi написал: ВСЁ  - думаю, короче и без цикла у меня уже точно не получится...
Немного не то, что я просил (все таки идет изменение исходного файла), но решение очень красивое, нужно запомнить. Мне часто нужно делать нечто подобное, но все как-то извращенными способами приходилось это делать :D
Изменено: tvit - 09.05.2015 14:41:47
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Спасибо всем откликнувшимся. Если без цикла никак, тогда проще найти свободную ячейку в Excel и воспользоваться формулой массива :-)
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Вы сначала вычисления присваиваете ячейке, а затем значение ячейки присваиваете переменной. А я спрашиваю как сразу присвоить переменной, не используя вспомогательных ячеек
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Спасибо за ответы. но к сожалению все не то.

to Gling: то что предлагаете Вы у меня уже есть в моем вопросе. но тут используется дополнительная ячейка. а мне нужно сразу присвоить переменной.
to MBT: Ваш вариант вообще не работает
to Мотя: вариант решения через цикл я знаю. но мне нужно именно как одной формулой присвоить значение переменной.
Прошу прощения если не точно сформулировал свой вопрос

 
Поиск минимального/максимального значения, Использование формулы массива в VBA
 
Дано:
В ячейках B1:B4 правильные даты в текстовом формате, выгружаются из внешней СУБД. мне нужно найти минимальную дату и максимальную дату. Есть вариант через вспомогательный столбик =Значен("B1", есть вариант через формулу массива  {=МИН(ЗНАЧЕН(B1:B4))}
Мне нужно это сделать через VBA без вспомогательных ячеек. Макрорекордер записал Range("B6"].FormulaArray = "=MIN(VALUE(R[-5]C:R[-2]C))" , а мне нужно что то типа ааа = MIN(VALUE(R[-5]C:R[-2]C))

Подскажите пожалуйста как это сделать?
Очистка форматов таблицы Excel с сохранением типа данных
 
Цитата
ikki пишет: Ещё одна идея возникла. Именно на уровне идеи.
Сам знаешь у кого мысли сходятся ;-)
Очистка форматов таблицы Excel с сохранением типа данных
 
Хорошая идея   :D     Но у меня была еще одна, правда моих знаний не достаточно чтобы ее довести до ума. это использование стандартного стиля: ThisWorkbook.Styles("Normal"   Как то так:
Скрытый текст
но установкой шрифта по умолчанию есть некоторые проблемы
Изменено: tvit - 13.02.2015 19:55:58
Очистка форматов таблицы Excel с сохранением типа данных
 
Цитата
ikki пишет: С "умными" таблицами сам раньше не работал...
Пока пришёл к выводу, что проблем гораздо больше, чем плюсов.
Я тоже пришел к такому же выводу, у меня весь код изобилует затычками, где я перехожу на обычный Range, просто чтобы хоть как то  работало, а потом после того как в инете найду решение, переписываю кусок кода  на "правильный".   :D   Но надеюсь, что когда освою умные таблицы до конца, то все таки будет проще писать правильный код.
Очистка форматов таблицы Excel с сохранением типа данных
 
Изменил свое предыдущее сообщение, прочитай, пожалуйста последние две строчки.
Очистка форматов таблицы Excel с сохранением типа данных
 
Это первое что пришло в голову, так и сделаю если не найду другого решения, но может есть какое то другое решение попроще, какой-то другой способ очистки не затрагивающий числовые форматы?
На самом деле этот вариант может и не сработать: если пользователь вставит "Умную таблицу", то заголовок может оказаться текстовым, а тело таблицы числовым. В моем файле пример такого столбца - "Номер счета"
Изменено: tvit - 13.02.2015 19:31:16
Очистка форматов таблицы Excel с сохранением типа данных
 
Доброе время суток!

Существует "База" на листе 2.
Задача очистить эту базу от всех красот. и преобразовать ее в "Умную таблицу" для последующей обработки. (База фильтруется по полю Подразделение, и затем рассылается по подразделениям, каждому свой кусок таблицы, но это уже реализовано)
Пример во вложении справляется с задачей очистки таблицы, с одним но: Типы данных ячеек тоже очищаются, и , как следствие, дата преобразуется в число, и конечный пользователь уже видит не то, что хотелось бы.
Проблема усугубляется тем,  что столбцов в таблице может быть сколько угодно, и любые столбцы могут быть датой. О таблице я знаю только номер столбца, который содержит номер Подразделения, все остальное произвольно.

Подскажите, пожалуйста, как правильно очистить форматы таблицы Excel с сохранением типов данных столбцов?
Скрытый текст
Изменено: tvit - 11.12.2015 21:41:28
[VBA] Ускорение загрузки внешней таблицы
 
Добрый день!

  Имеется табличка на один из листов которой при открытии файла загружаются данные из SharePoint (10 000+ строк) при этом к ней автоматически добавляются
3 вычисляемых поля, в одном из которых используется функция ПОИСКПОЗ по внешней таблице excel  250 тыс. строк. Как результат все это работает, мягко говоря, не быстро. Но зато это все работает совсем без VBA
  Вопросы:
  1. Подскажите как написать скрипт, который на время загрузки внешней таблицы отключит обновление и автоматические вычисление (эти две команды в принципе знаю как написать) , загрузит таблицу, и затем заполнит вычисляемые поля и включит обновление экрана. Думаю это должно ускорить загрузку.
  2. Может есть другие способы ускорения? Как я понимаю, основной тормоз это вычисляемое поле. оно нужно только для того чтобы проверить есть искомая строка во второй базе или нет, но без него не обойтись
   
 
[VBA] Копирование нескольких листов Excel с последующим сохранением, копировать в отдельную книгу и сохранить под новым именем
 
Цитата
JeyCi пишет: видится мне, что вы ни линки не смотрите в полной мере, ни сами ничего не делаете, ни даже в приёмы заглянуть не напрягаетесь
За ссылку на "приемы" спасибо, там действительно есть часть того, что мне нужно
[VBA] Копирование нескольких листов Excel с последующим сохранением, копировать в отдельную книгу и сохранить под новым именем
 
Цитата
JeyCi пишет:
это всё кроме одного пункта вроде бы можно сделать надстройкой отсюда - только она выкинет вам в таком виде (без связей и формул, а значениями) каждый ли ст (можно выбрать какие и указать папку куда) отдельным файлом ...
Да, судя по описанию и скриншоту , это примерно то, что нужно, только как его подправить под свои нужды? Да и 49$ ради одной нужной настройки как-то многовато :-)
Цитата
Nic70y пишет: с этим справиться макрорекордер. (скопировать - вставить значения)
Если бы с этим мог справиться макрорекордер, я бы не писал свой вопрос
Изменено: tvit - 21.07.2014 10:14:04
Страницы: 1 2 След.
Наверх