Найти последнее вхождение подстроки в строке в большом текстовом файле
Я пытаюсь прочитать огромный текстовый файл, около 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