Получение данных из текстового файла, чей вес от 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д