Получение данных из текстового файла, чей вес от 200 Мб и больше - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Подскажите пожалуйста правильный метод получения текстовых данных в виде таблицы из текстового файла, где размер может варьироваться от 200 до 400 мегабайт. В текстовом файле кроме хтмл разметок и тегов присутствуют таблицы вида: <pre> 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 4 6 ... </pre> Пробовал регулярными выражениями получить данные, но не смог из за символа переноса строки. Если кто подскажет паттерн, буду премного благодарен. Я обычно обхожусь replace, чтобы соединить в одну строку и вытаскиваю данные регуляркой, а тут замена не получается, выдает - OutOfMemory... Выгружаю в переменную массива стрингов следующим кодом:
затем пошагово сплитами/реплейсами ищу необходимые данные и записываю в листбокс, но на определенных строк(~1000000) получаю тот же OutOfMemory...

Решение задачи: «Получение данных из текстового файла, чей вес от 200 Мб и больше»

textual
Листинг программы
Imports System.IO
Imports System.Text
Public Class Form3
    Dim txt As New List(Of List(Of String))
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ttx As List(Of String)
        txt.Capacity = 1000
        Me.Cursor = Cursors.WaitCursor
        Dim stw As New Stopwatch()
        stw.Start()
        Using strr As New StreamReader("test.txt", Encoding.Default)
            Dim line As String = Nothing
            Do
                line = strr.ReadLine()
                If Not String.IsNullOrEmpty(line) AndAlso line.Trim = "<pre>" Then
                    ttx = New List(Of String)
                    ttx.Capacity = 100
                    ttx.Add(line)
                    Do
                        line = strr.ReadLine()
                        ttx.Add(line)
                    Loop While line.Trim <> "</pre>"
                    txt.Add(ttx)
                End If
            Loop While line IsNot Nothing
        End Using
        stw.Stop()
        Me.Cursor = Cursors.Default
        MsgBox("Read: " & Format(stw.ElapsedMilliseconds / 1000, "#0.0") & vbCrLf & "Blocks " & txt.Count)
        NumericUpDown1.Maximum = txt.Count
    End Sub
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Dim ii As Integer = NumericUpDown1.Value
        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(txt(ii - 1).ToArray)
    End Sub
End Class

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы