Как обработать большой текстовый файл - 1Гб?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 13:45

Нужно выделить в логе (текстовый файл) размером 1-2Гб первый столбец и записать его в другой файл. Но даже простой цикл последовательного чтения строк в одну и ту же переменную вешает процесс на неизвестное время. Второй час висит - не уверен что получится.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 13:46

Оптимизировать. И помнить, что мир шире, чем Line input.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 13:48

Намекните - как?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 13:50

Что "как"?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 13:55

Как оптимизаровать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 13:56

Как я могу ответить, как улучшить код, если я даже не видел код.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:00

Понял. Пришлось прекратить э экперимент. Код весьма прост - оцениваю способен ли VB вообще открыть такой файл.

Код: Выделить всё
Private Sub Form_Load()                                 '
Dim tmp As String
Open "data_20051210_1809.y.dat" For Input As #1

While Not EOF(1)
   Line Input #1, tmp
Wend
Close
End
End Sub                       

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 14:01

Нда.
Короче, критерии колонки в студию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:08

Нужна первая колонка с 6-го по 11-й символ.
    +228 +654 +101 26.315 996005.00 2531.493 0.0899044 0.000

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 14:10

А теперь критерии колонки нормально: признак начала колонки и признак конца. И умудрись нормально объяснить это с первого раза.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:17

Видимо да. Начинается строка с 5 пробелов. Далее нужное число с 6-го по 11-й символ. Далее ненужная часть строки. Длина всей строки одинаковая - 76символов. Строка стандартно заканчивается CrLf.

Должен сказать, что при малдом (1Мб) размере все работает нормально. Т.е. процесс завершается быстро. При 1ГБ - не долждался за 2 часа.

Возможно опять получится коряво, но приведу:

[list=] -644 -2661 +97 -26.316 996005.00 2531.493 0.0898970 0.000
+490 -2977 +78 -26.316 996005.00 2531.493 0.0898959 0.000
+223 -724 +54 -26.316 996005.00 2531.493 0.0898949 0.000
[/list]

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 14:22

Далее нужное число с 6-го по 11-й символ

Всегда?
Длина всей строки одинаковая - 76символов.

Всегда? От начала до конца? Включая CrLf?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:25

Да, структура всех строк одинакова. Соответствено в каждой строке нужен с 6-го по 11 символ.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 14:26

Тогда зачем тебе String-переменные?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:30

Для line Input. Вы предлагаете работать с файлом как с бинарным?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 14:36

Как минимум.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:43

Взялся с оптимизмом идиота, но запутался в адресации. Если не получится будет обидно...

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 11.12.2009 (Пт) 14:54

ОК. Вначале так:

Код: Выделить всё
Private Sub Form_Load()                                 '
Dim I tmp As Byte

Open "data_20051210_1809.y.dat" For Binary As #1 
While Not EOF(1)
   Get #1, , tmp
Wend
Close
End
End Sub                                                 '


Ждем окончания...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 11.12.2009 (Пт) 14:59

Чудовищная дрянь. Так будет ещё медленнее.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение alibek » 11.12.2009 (Пт) 15:15

1. Сдвиг +5
2. Считать данные в байтовый массив размером 6 байт
3. Сдвиг +67
4. Повторить с п.2 до конца файла
Lasciate ogni speranza, voi ch'entrate.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Joo » 11.12.2009 (Пт) 15:25

Dimon111 писал(а):При 1ГБ - не долждался за 2 часа.

:shock: Нифига себе, я в 500, метровом файле, порядка 8 миллионов строк, дубликаты строк отсеивал, у меня не очень сильная машина, но за 5 минут укладывался.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Mikle » 14.12.2009 (Пн) 12:08

alibek
А задать структуру сразу на 76 байт ещё лучше. При размере читаемого фрагмента меньше кластера диска, размер читаемого фрагмента практически не влияет на скорость.
Код: Выделить всё
type myType
  a(4) as byte
  b(5) as byte
  c(66) as byte
end type

А ещё лучше создать массив таких структур, штук на 1000, и читать его весь.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 14.12.2009 (Пн) 12:38

Спасибо ответившим. Надо сказать, что вариант c Line Input завершился с ошибкой через 2 дня. Вариант с Get #1 завершается через 40 минут, что меня в принципе устранивает, но выделить первую колонку так и не получается потому что в файле всетаки присутствуют строки длиной на один байт меньше.

Хотел привезаться к маркерам 12, 13 но пока не получается.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Денис » 14.12.2009 (Пн) 13:26

А если засунуть файл в Excel? Но только версия не ниже 2007-го. А потом нужный столбец вставить в новый документ и сохранить как текст.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 14.12.2009 (Пн) 14:08

У меня он сечас 4Гб занимает. Засунул. Excel заткнутся. Думаю навсегда.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Sirik » 14.12.2009 (Пн) 14:13

если файлик статический, то мб лучше его перегнать в БД? все операции будут происходить почти мгновенно
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 14.12.2009 (Пн) 14:40

Если можно - хоть в двух словах или ключевое слово для поиска. А то чувствую, что для VB эта задача не по зубам.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Хакер » 14.12.2009 (Пн) 15:16

Ерунду говоришь. Это для тебя эта задача не по зубам.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 14.12.2009 (Пн) 15:27

И здесь Вы тоже правы...

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение alex77755 » 14.12.2009 (Пн) 15:29

Попробовал и я создать и обработать такой файл. Размер получился 1 554 058 350
Наверно неправильній код. Как я понял: нужно первый столбец выдернуть в отдельній файл

Код: Выделить всё
Private Sub Комманда1_Click()
Dim a, b, c, d, e, f, g, h As String
Dim i
Dim fso, s ' просто чио б узнать размер файла
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFile("C:\22.txt")
  s = f.Name & " занимает " & f.Size & " байт"
    Debug.Print s
    Debug.Print " Начало работы    " & Time
  Set f = Nothing
  Set fso = Nothing
Open "C:\22.txt" For Input As 1
Open "C:\2.txt" For Append As 2
Debug.Print
Do While Not EOF(1)
Input #1, a, b, c, d, e, f, g, h
'Debug.Print a, b, c, d, e, f, g, h
Print #2, a
i = i + 1
DoEvents
Loop
Close #2
Close #1
  Debug.Print
  Debug.Print " обработано строк    " & i
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFile("C:\2.txt")
  s = f.Name & " занимает " & f.Size & " байт"
  Debug.Print s
  Debug.Print
  Debug.Print " Конец  работы    " & Time
   Set f = Nothing
  Set fso = Nothing
End Sub


в дебаггере напечатано:

22.txt занимает 1554058350 байт
Начало работы 14:12:58


обработано строк 24190660
2.txt занимает 169334620 байт

Конец работы 14:16:20

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 66

    TopList