Получение данных из текстового файла, чей вес от 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... Выгружаю в переменную массива стрингов следующим кодом:
Листинг программы
  1. Dim txt() As String = File.ReadAllLines(path)
затем пошагово сплитами/реплейсами ищу необходимые данные и записываю в листбокс, но на определенных строк(~1000000) получаю тот же OutOfMemory...

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

textual
Листинг программы
  1. Imports System.IO
  2. Imports System.Text
  3. Public Class Form3
  4.     Dim txt As New List(Of List(Of String))
  5.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  6.         Dim ttx As List(Of String)
  7.         txt.Capacity = 1000
  8.         Me.Cursor = Cursors.WaitCursor
  9.         Dim stw As New Stopwatch()
  10.         stw.Start()
  11.         Using strr As New StreamReader("test.txt", Encoding.Default)
  12.             Dim line As String = Nothing
  13.             Do
  14.                 line = strr.ReadLine()
  15.                 If Not String.IsNullOrEmpty(line) AndAlso line.Trim = "<pre>" Then
  16.                     ttx = New List(Of String)
  17.                     ttx.Capacity = 100
  18.                     ttx.Add(line)
  19.                     Do
  20.                         line = strr.ReadLine()
  21.                         ttx.Add(line)
  22.                     Loop While line.Trim <> "</pre>"
  23.                     txt.Add(ttx)
  24.                 End If
  25.             Loop While line IsNot Nothing
  26.         End Using
  27.         stw.Stop()
  28.         Me.Cursor = Cursors.Default
  29.         MsgBox("Read: " & Format(stw.ElapsedMilliseconds / 1000, "#0.0") & vbCrLf & "Blocks " & txt.Count)
  30.         NumericUpDown1.Maximum = txt.Count
  31.     End Sub
  32.     Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
  33.         Dim ii As Integer = NumericUpDown1.Value
  34.         ListBox1.Items.Clear()
  35.         ListBox1.Items.AddRange(txt(ii - 1).ToArray)
  36.     End Sub
  37. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы