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

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

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

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

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

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

Чтобы сразу задать массив под нужный размер, его нужно определить.
Может быть быстрее определить количество строк с помощью ADO?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.09.2011, 16:45   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пока такой вариант, основанный на коде alex77755
Полмиллиона строк обрабатывает за 14 секунд - половину времени считает строки, половину отбирает значения.
Вообще-то первый код alex77755 отрабатывает быстрее, но там есть Transpose, что вероятно вылезет на большом количестве отобранных.
И ещё - я не привязан к длине цифр - тут режется по "-", но есть привязка к виду строки
Код:
BSNBC=TELEPHON-9998887766-TS11&TELEPHON-5554710050-
т.е. должно быть именно так - два нужных слова, между ними цифры и "-"
Код:
Sub QWERTy5()
'Dim tm: tm = Timer
Dim i&, temp
FL = "C:\testbig.txt"
    Dim Fsys As Object
    Set Fsys = CreateObject("Scripting.FileSystemObject")
    Dim Tstream As Object
    Dim z As String
    
    Set Tstream = Fsys.OpenTextFile(FL)
    While Not Tstream.AtEndOfStream
    z = Tstream.ReadLine
    i = i + 1
    Wend
    Tstream.Close

    ReDim BLOK(1 To i, 1 To 2)
    i = 0
    
    Set Tstream = Fsys.OpenTextFile(FL)

    While Not Tstream.AtEndOfStream
      z = Tstream.ReadLine
      If z Like "*BSNBC=TELEPHON-*TS11&TELEPHON*" Then
      i = i + 1
      temp = Split(Split(z, "BSNBC=TELEPHON-")(1), "-")
      BLOK(i, 1) = temp(0)
      BLOK(i, 2) = temp(2)
      End If
    Wend
    
       Cells.ClearContents
       [a1:b1].Resize(i) = BLOK
'Debug.Print Timer - tm
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.09.2011 в 18:31.
Hugo121 вне форума Ответить с цитированием
Старый 28.09.2011, 18:22   #13
Неологист
Новичок
Джуниор
 
Регистрация: 27.09.2011
Сообщений: 4
По умолчанию

Сделал все по совету хуго средствами excel.

Офис 2010. Разделил основной файл на 6 файлов по 750к строк.
В эксель их, разделил по столбцам сначала по запятой, удалил лишние столбцы, потом по -, удалил лишнее, потом заменой на пустоту очистил ненужные поля. Потом фильтр по пустым строкам и вуаля... Все работает)
Неологист вне форума Ответить с цитированием
Старый 28.09.2011, 18:30   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Но макросом то быстрее будет.
Раз уж он уже готов.
Заодно и результаты сверите...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.09.2011, 18:45   #15
Неологист
Новичок
Джуниор
 
Регистрация: 27.09.2011
Сообщений: 4
По умолчанию

Сошлось 1 в 1, респект Алекс и Хуго)

Последний раз редактировалось Неологист; 28.09.2011 в 18:49.
Неологист вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт в эксел очень большого файла txt danika24 Microsoft Office Excel 10 20.07.2011 16:34
импорт данных из excel в txt и из txt в excel ESV Microsoft Office Excel 3 19.11.2010 10:29
Импорт данных из текстового файла chobo Microsoft Office Excel 7 28.10.2010 14:29
импорт из txt, работа с массивом данных, экспорт в txt Danara Microsoft Office Excel 4 31.03.2010 00:26
Импорт в базу данных из файла. Stalkr БД в Delphi 7 12.11.2008 15:26