Найти последнее вхождение подстроки в строке в большом текстовом файле

Я пытаюсь прочитать огромный текстовый файл, около 10 гигабайт. Я хочу найти последнее вхождение строки.

Например, ниже приведен пример из 5 строк, 2-я и 5-я строки совпадают.
Я хочу взять последний, так как он самый последний, и вывести его в текстовый файл с помощью Streamreader.

Мне лучше использовать Regex или мне лучше использовать lastindexof определить, последняя ли это строка?

У меня много таких поисков, поэтому я хотел бы создать какой-то массив и выполнить его поиск снизу вверх для повышения производительности.

Может ли кто-нибудь указать мне правильное направление?

GET/a/users/115656WindowsNT6.1;Trident
GET/a/users/126692MSIE7.0;WindowsNT6.1
GET/a/users/77562WindowsNT6.1;WOW64;Tr
GET/a/users/35650WindowsNT6.1;WOW64;Tr
GET/a/users/126692MSIE7.0;WindowsNT6.2

1 ответ

Решение

Я полагаю, что File.ReadLines Это один из лучших способов чтения больших файлов в соответствии с msdn:

Методы ReadLines и ReadAllLines отличаются следующим образом: когда вы используете ReadLines, вы можете начать перечисление коллекции строк до того, как будет возвращена вся коллекция; когда вы используете ReadAllLines, вы должны подождать, пока весь массив строк будет возвращен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете с очень большими файлами, ReadLines могут быть более эффективными.

Поэтому в зависимости от этого я написал следующий код, и я надеюсь, что это поможет:

Dim myList As List(Of String) = IO.File.ReadLines("MyLargFile.txt").OfType(Of String)().Where(Function(s) s.Contains("126692MSIE7")).ToList

Этот фрагмент кода вернет вам список совпадающих строк.

Выход:

myList(0) = "GET/a/users/126692MSIE7.0;WindowsNT6.1" 
myList(1) = "GET/a/users/126692MSIE7.0;WindowsNT6.2"

И, конечно, если вам нужна последняя строка, вы можете использовать Last метод:

Dim last As String = myList.Last
Другие вопросы по тегам