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

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

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

Сообщение Dimon111 » 15.12.2009 (Вт) 16:56

Черт, я наверно невнимательно прочитал. Сейчас ищу и не нахожу как залить файл на этот сервер. Наверно нет такой функции. Попробую другой способ.

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

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

Сообщение Хакер » 15.12.2009 (Вт) 17:12

Залить файл на этот сервер? На какой ещё сервер? На наш форум что-ли?
—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 » 15.12.2009 (Вт) 17:25

Вот ссылка на файл:

http://upload.caxapa.ru/3-1.txt

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

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

Сообщение Mikle » 15.12.2009 (Вт) 18:03

Код: Выделить всё
Option Explicit

Private Type mType
  b(7) As Byte
End Type

Private Sub Form_Load()
  Dim nf1 As Integer, d1(16385) As Byte, a1 As Long, p1 As Long
  Dim nf2 As Integer, d2(4095) As mType, a2 As Long
  Dim i As Long
  Show
  Caption = "Wait..."
  For a2 = 0 To 4095
    d2(a2).b(6) = 13
    d2(a2).b(7) = 10
  Next a2
  nf1 = FreeFile
  Open "1.txt" For Binary As #nf1
  nf2 = FreeFile
  Open "2.txt" For Binary As #nf2
  Close #nf2: Kill "2.txt"
  Open "2.txt" For Binary As #nf2
  p1 = 1
  a2 = 0
  Do
    a1 = 0
    Get #nf1, p1, d1()
    Do
      For i = 0 To 5
        d2(a2).b(i) = d1(a1 + i + 5)
      Next i
      a2 = a2 + 1
      If a2 = 4096 Then
        a2 = 0
        Put #nf2, , d2()
      End If
      a1 = a1 + 74
      If d1(a1) <> 10 Then
        a1 = a1 + 1
        If d1(a1) <> 10 Then
          a1 = a1 + 1
          If d1(a1) <> 10 Then Exit Do
        End If
      End If
      If a1 > 16385 - 76 Then p1 = p1 + a1: Exit Do
    Loop
  Loop Until EOF(1)
  Close #nf2
  Close #nf1
  Caption = "Ok!"
End Sub

В исходном тексте строки разделены chr$(10) без chr$(13).
Для скорости скомпилируй и включи оптимизацию "Remove Array Bounds Checks".

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 0:34

Последний пример вполне рабочий и наиболее быстрый.

Посмею не согласитоя. Специально протестил на том же файле 22.txt занимает 4068577575 байт

с Input ом
Начало работы 14:40:45
Конец работы 14:49:30 525 c

Код с FSO
Начало работы 22:55:17
Конец работы 23:23:23 1686 c

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

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

Сообщение Dimon111 » 16.12.2009 (Ср) 10:07

Сегодня дооформил программу и намерен протестить все варианты заново.

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 13:06

Мой вариант
22.txt занимает 4068577575 байт
Начало работы 4:29:37
обработано строк 63331971
2M.txt занимает 443323790 байт
Конец работы 4:38:29

ФЗО
начало 6:03:06
конец 6:29:50

Третий вариант
начало работы 6:59:09
Ошибка 7:20:34

Варианты с битовым чтением требуют либо четкой структуры либо дополнительных обработок данных и соответственно больше времени

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

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

Сообщение Dimon111 » 16.12.2009 (Ср) 13:58

Закончил и я тестить все варианты.

Докладаю.

Код: Выделить всё
Option Explicit
Private Type mType
  b(7) As Byte
End Type
Dim LogDir As String
Private Sub Form_Load()                                 '
End Sub                                                 '
Private Sub Start_Click()
    Dim i As Long, j As Long
    Start.Enabled = False
    OpenFl
    i = Timer
    Prime1
    j = Timer
    Start.Enabled = True
    MsgBox Round(j - i, 2)
End Sub
Private Sub CommEXIT_Click()
End
End Sub
Private Sub OpenFl()
  On Error Resume Next                                  '
70:     CommonDialog.ShowOpen                           'Открытие диалога для задания имени исходного файла
        LogDir = CommonDialog.FileName                  'Присвоение имени файла
        If LogDir = "" Then                             'Если выбран неправильный файл
            MsgBox "Выбери файл!", vbOKOnly + vbExclamation, "Сообщение для непонятливых"
            GoTo 70                                     'Цикл запроса файла архиватора 7ZIP
        End If                                          '
        Form1.Caption = LogDir                          'Название файла - в заголовок формы
End Sub
Private Sub Prime1()
    Dim fso As New FileSystemObject, f1 As Object, f2 As Object
    Dim st As String, k As Long, m() As String
    Set f1 = fso.OpenTextFile(LogDir, ForReading)
    Set f2 = fso.CreateTextFile("1column.txt", True)
        While f1.AtEndOfLine = False
            DoEvents
            st = f1.ReadLine
            k = k + 1
            m = Split(Trim(st), " ")
            f2.WriteLine (m(0))
        Wend
    Set fso = Nothing
    Set f1 = Nothing
    Set f2 = Nothing
End Sub
Private Sub Prime2()
    Dim a, b, c, d, e, f, g, h As String
    Dim i
    Open LogDir For Input As 1
    Open "Prime2.txt" For Append As 2
    Do While Not EOF(1)
        Input #1, a, b, c, d, e, f, g, h
        Print #2, a
        i = i + 1
        DoEvents
    Loop
    Close #2
    Close #1
End Sub
Private Sub Prime3()
  Dim nf1 As Integer, d1(4095) As Byte, a1 As Long, p1 As Long
  Dim nf2 As Integer, d2(4095) As mType, a2 As Long
  Dim i As Long
  Show
  For a2 = 0 To 4095
    d2(a2).b(6) = 13
    d2(a2).b(7) = 10
  Next a2
  nf1 = FreeFile
  Open LogDir For Binary As #nf1
  nf2 = FreeFile
  Open "2.txt" For Binary As #nf2
  p1 = 1
  a2 = 0
  Do
    a1 = 0
    Get #nf1, p1, d1()
    Do
      For i = 0 To 5
        d2(a2).b(i) = d1(a1 + i + 5)
      Next i
      a2 = a2 + 1
      If a2 = 4096 Then
        a2 = 0
        Put #nf2, , d2()
      End If
      If d1(a1 + 60) = 10 Then a1 = a1 + 61 Else a1 = a1 + 60
      If a1 > 4095 - 60 Then p1 = p1 + a1: Exit Do
    Loop
  Loop Until EOF(1)
  For i = 0 To a2 - 1
    Put #nf2, , d2(i)
  Next i
  Close #nf2
  Close #nf1
End Sub
Private Sub Prime4()
  Dim nf1 As Integer, d1(4095) As Byte, a1 As Long, p1 As Long
  Dim nf2 As Integer, d2(4095) As mType, a2 As Long
  Dim i As Long
  Show
  For a2 = 0 To 4095
    d2(a2).b(6) = 13
    d2(a2).b(7) = 10
  Next a2
  nf1 = FreeFile
  Open LogDir For Binary As #nf1
  nf2 = FreeFile
  Open "2.txt" For Binary As #nf2
  p1 = 1
  a2 = 0
  Do
    a1 = 0
    Get #nf1, p1, d1()
    Do
      For i = 0 To 5
        d2(a2).b(i) = d1(a1 + i + 10)
      Next i
      a2 = a2 + 1
      If a2 = 4096 Then
        a2 = 0
        Put #nf2, , d2()
      End If
      If d1(a1 + 65) = 10 Then a1 = a1 + 66 Else a1 = a1 + 65
      If a1 > 4095 - 68 Then p1 = p1 + a1: Exit Do
    Loop
  Loop Until EOF(1)
  For i = 0 To a2 - 1
    Put #nf2, , d2(i)
  Next i
  Close #nf2
  Close #nf1
  Caption = "Ok!"
End Sub
Private Sub Prime5()
  Dim nf1 As Integer, d1(16385) As Byte, a1 As Long, p1 As Long
  Dim nf2 As Integer, d2(4095) As mType, a2 As Long
  Dim i As Long
  For a2 = 0 To 4095
    d2(a2).b(6) = 13
    d2(a2).b(7) = 10
  Next a2
  nf1 = FreeFile
  Open LogDir For Binary As #nf1
  nf2 = FreeFile
  Open "2.txt" For Binary As #nf2
  Close #nf2: Kill "2.txt"
  Open "2.txt" For Binary As #nf2
  p1 = 1
  a2 = 0
  Do
    a1 = 0
    Get #nf1, p1, d1()
    Do
      For i = 0 To 5
        d2(a2).b(i) = d1(a1 + i + 5)
      Next i
      a2 = a2 + 1
      If a2 = 4096 Then
        a2 = 0
        Put #nf2, , d2()
      End If
      a1 = a1 + 74
      If d1(a1) <> 10 Then
        a1 = a1 + 1
        If d1(a1) <> 10 Then
          a1 = a1 + 1
          If d1(a1) <> 10 Then Exit Do
        End If
      End If
      If a1 > 16385 - 76 Then p1 = p1 + a1: Exit Do
    Loop
  Loop Until EOF(1)
  Close #nf2
  Close #nf1
End Sub

Немного о программе. Все варианты оформлены функциями. Функция берет название файла из строковой переменной LogDir. Вызов осуществляется из Private Sub Start_Click(). Там же подсчитывается время.

Теперь примеры.
В программе их 5. Самый первый - рабочий, с которым я раюботаю уже второй день. Как оказалось - не самый быстрый, но нормально кушает и 4ГБ файл. 1ГБ он обрабатывает за 474С

Prime2. Красивый, но похоже бесконечный. Формирует пустой файл. Дождаться конца обработки за 15 минут не удалось.

Prime3. На файле 4,31ГБ выдал ошибку BAD RECORD NUMBER (63) в строке Get #nf1, p1, d1(). Сформировал файл 273МБ. Содержимое - каша.

Код: Выделить всё
1893 0
.484 0
999.00
26.315
     
     -
    -2
51 0.0


Файл 1ГБ обработал за 39с. Сформировал файл. Содержимое - каша.



Prime4. На файле 4,31ГБ выдал ошибку BAD RECORD NUMBER (63) в строке Get #nf1, p1, d1(). Сформировал файл 86МБ. Содержимое - каша.
Файл 1ГБ обработал за 35с. Сформировал файл. Содержимое - каша.

Prime5. Самый интересный. На файле 4,31ГБ выдал ошибку BAD RECORD NUMBER (63) в строке Get #nf1, p1, d1(). Сформировал файл. Содержимое - по структуре правильная но начало не совпадает с исходным столбцом.
Файл 1ГБ обработал за 24с. Сформировал правильный файл.

Самый быстрый вариант. Жаль неправильно обрабатывет файл 4,31ГБ. В дальнейшем попробую разобратся.

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

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

Сообщение Mikle » 16.12.2009 (Ср) 16:04

Варианты 3 и 4 выкинь - они сделаны по неверному представлению об исходном файле.
Вариант 5 не обработает больше 2Гб, дальше Long переполнится.
Про работу с большими файлами здесь была тема на форуме, поищи.

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

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

Сообщение Хакер » 16.12.2009 (Ср) 16:13

Вопрос: как вы организуете замеры скорости? Ведь у вас нет большого файла? Или автор кинул 4-гиговый файл вам по почте?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

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

Сообщение Antonariy » 16.12.2009 (Ср) 16:20

Достаточно N (сотен)тысяч раз выполнить проверку небольшого.
Лучший способ понять что-то самому — объяснить это другому.

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

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

Сообщение Хакер » 16.12.2009 (Ср) 16:25

И потом обломаться от того, что метод быстр, но абсолютно непригоден для работы с файлами > 2gb?
—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 » 16.12.2009 (Ср) 16:35

Хакер писал(а):Вопрос: как вы организуете замеры скорости? Ведь у вас нет большого файла? Или автор кинул 4-гиговый файл вам по почте?

Большой файл любого размера делается из представленого образца методом копирования за пару минут. CTRL+A, C, V

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

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

Сообщение Antonariy » 16.12.2009 (Ср) 16:45

Хакер писал(а):И потом обломаться от того, что метод быстр, но абсолютно непригоден для работы с файлами > 2gb?
И потому не может быть исправлен, чтобы стать пригодным?
Лучший способ понять что-то самому — объяснить это другому.

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

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

Сообщение Dimon111 » 16.12.2009 (Ср) 16:50

Mikle писал(а):Варианты 3 и 4 выкинь - они сделаны по неверному представлению об исходном файле.
Вариант 5 не обработает больше 2Гб, дальше Long переполнится.
Про работу с большими файлами здесь была тема на форуме, поищи.


Страно. В первом примере Prime1 оставил по глупости счетчик

Код: Выделить всё
k = k + 1


Но при обработке 4,31Гб ошибки не возникает.
Сейчас, пожалуй, выведу значение числа строк на экран по окончании работы.

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

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

Сообщение Mikle » 16.12.2009 (Ср) 17:20

Хакер писал(а):И потом обломаться от того, что метод быстр, но абсолютно непригоден для работы с файлами > 2gb?

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

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

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

Сообщение Dimon111 » 16.12.2009 (Ср) 17:28

Mikle писал(а):Я ориентировался на первый пост:
Dimon111 писал(а):Нужно выделить в логе (текстовый файл) размером 1-2Гб первый столбец

Да, все правильно. Объем не должен превышать 2ГБ. Это уж я перестарался.

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

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

Сообщение Хакер » 16.12.2009 (Ср) 17:34

Ты гарантируешь, что объём не выйдет за границы положительных значений Long-а? Точно гарантируешь? А то с критериями границ столбца ты уже прогарантировался.
—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 » 16.12.2009 (Ср) 17:56

Хакер писал(а):Ты гарантируешь, что объём не выйдет за границы положительных значений Long-а? Точно гарантируешь? А то с критериями границ столбца ты уже прогарантировался.

Гарантирую.

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 18:53

Prime2. Красивый, но похоже бесконечный. Формирует пустой файл.

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

Private Sub Комманда4_Click()
   Dim FSO As New FileSystemObject
   Dim f1 As Object, f2 As Object, f3 As Object
   Dim st As String, i, j As Long, k As Long, m() As String
        k = 0
    Set f1 = FSO.OpenTextFile("c:\dat.txt", ForReading)
        Set f2 = FSO.CreateTextFile("c:\test2.txt", True)
Open "C:\LOG.txt" For Append As 3
  Print #3,
   Print #3, "ФЗО"
Print #3, "начало " & Time
i = Time
        While f1.AtEndOfLine = False
            DoEvents
            If k = 9999 Then
            k = k
            End If
            st = f1.ReadLine
            k = k + 1
            m = Split(Trim(st), " ")
            f2.WriteLine (m(0))
        Wend
            Set f1 = Nothing
    Set f2 = Nothing
         Set FSO = CreateObject("Scripting.FileSystemObject")
  Set f = FSO.GetFile("C:\test2.txt")
  s = f.Name & " занимает " & f.Size & " байт"
       Print #3, "обработано  строк   " & k
          Print #3, s
                    i = Time
                  Print #3, "конец  " & Time
            Print #3,
           Close #3
    Set FSO = Nothing
    Set f3 = Nothing
End Sub

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 19:33

Вот лог для одного и того же файла 5175590310 байт
Мой вариант
dat.txt занимает 5175590310 байт
Начало работы 17:24:16
обработано строк 67650000
test1.txt занимает 521838572 байт
Конец работы 17:34:20

ФЗО
начало 17:34:20
обработано строк 67650000
test2.txt занимает 454188570 байт
конец 18:28:22

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

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

Сообщение Хакер » 16.12.2009 (Ср) 20:18

А что такое З в слофе ФЗО?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

Сообщение Sirik » 16.12.2009 (Ср) 20:46

имхо, в VB6 объявлять
Код: Выделить всё
Dim a, b, c, d, e, f, g, h As String
Dim i
это бред ;)

имхо, лучший вариант через Line Input:
Код: Выделить всё
    Dim st As String, start As Long, m() As String

    start = Timer

    Open "c:\2.dat" For Input As #1
    Open "c:\3.dat" For Binary As #2
        While Not EOF(1)
        DoEvents
            Line Input #1, st
            m = Split(Trim(st), " ")
            Put #2, , m(0) & vbCrLf
        Wend
    Close
   
    MsgBox "время: " & Str(Timer - start)


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

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

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

Сообщение Хакер » 16.12.2009 (Ср) 21:00

Автор, а чем тебя не устраивает брать блоки с первого по 11-ый символ, пропуская лишнее?
—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 » 16.12.2009 (Ср) 21:12

Я так пробовал. Но видимо реализовать не смог грамотно. Долго это получалось.

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 22:05

Код: Выделить всё
Input #1, a, b, c, d, e, f, g, h
Print #2, a

Конечно бред. Но работает в три раза быстрей чем:
Код: Выделить всё
Line Input #1, st
m = Split(Trim(st), " ")
Put #2, , m(0) & vbCrLf

Вам надо как быстро или красиво?

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

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

Сообщение Хакер » 16.12.2009 (Ср) 22:07

Чел, у тебя только h as string, всё остальное As Variant. Не читай низкопробные книжки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 23:18

А что такое З

сам не знаю. Как прочитал так и нап...
у тебя только h as string,

Да это я случайно скопировал. Обычно я не объявляю ...Разве что специально конкретные...

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

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

Сообщение alex77755 » 16.12.2009 (Ср) 23:30

На одном из сайтов упоминается:
50 миллионов строк это да - много.
Замедление на Line Input достаточно серьезное.
Тут возникает вопрос о плате за скорость.
Скажу по-другому: ограничивать ли способы решения средствами VB, или есть готовность ради скорости употребить любые средства?

Спрашиваю потому, что есть набор функций с префиксом mmio: mmioOpen, mmioRead, mmioClose (там их больше - я только часть привел). Скорость - быстрее не бывает. Но требуется самому управлять буферизацией, дальнейшей разбивкой на строки и пр. Особо ничего сложного, но все же...

Может в эту сторону порыть - mmio?

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

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

Сообщение alex77755 » 17.12.2009 (Чт) 0:31

Prime5. Самый интересный. но начало не совпадает с исходным столбцом.
Файл 1ГБ обработал за 24с. Сформировал правильный файл.



Решил ещё раз проверить. Сначала выкинул. Но проверил еще раз. Или у меня структура не совпадает или...
Вообщем даже из 300 метрового файла источника он создал переполнение 2048 М и вылетел с ошибкой

прав.1В прав.2В 5 вариант. Что то он зациклился. но работает быстро
1894 1894 1894
-1394 -1394 -1394
-2833 -2833 -2833
-1567 -1567 -1567
1393 1393 1894
2568 2568 -1394
-275 -275 -2833
-2650 -2650 -1567
-549 -549 1894
2421 2421 -1394
2116 2116 -2833
-717 -717 -1567
-3185 -3185 1894
-2336 -2336 -1394
1331 1331 -2833
2739 2739 -1567
69 69 1894
-2149 -2149 -1394
-1029 -1029 -2833
1262 1262 -1567
1983 1983 1894
350 350 -1394
-2005 -2005 -2833
-1887 -1887 -1567
1147 1147 1894
3046 3046 -1394
865 865 -2833
-2499 -2499 -1567
-2376 -2376 1894
991 991 -1394
3043 3043 -2833
1204 1204 -1567
-1967 -1967 1894
-2194 -2194 -1394
626 626 -2833
2212 2212 -1567
412 412 1894
-2272 -2272 -1394
-2827 -2827 -2833
-458 -458 -1567
2481 2481 1894
1803 1803 -1394
-1694 -1694 -2833
-2227 -2227 -1567
939 939 1894
2751 2751 -1394
922 922 -2833
-2215 -2215 -1567
-3087 -3087 1894
-441 -441 -1394
2134 2134 -2833
770 770 -1567
-2214 -2214 1894
-2251 -2251 -1394
314 314 -2833
2139 2139 -1567
1467 1467 1894
-1399 -1399 -1394
-3628 -3628 -2833
-1825 -1825 -1567

d2(4095) As mType
Put #nf2, , d2() вот тут он и впечатывает в файл сразу 4095 строки ( 1894, 1394, 2833, 1567 в цикле)

Пред.След.

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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 57

    TopList  
cron