Получение данных из текстового файла, чей вес от 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