在大型文本文件中查找字符串中最后一次出现的子字符串

时间:2015-05-27 14:24:01

标签: regex vb.net lastindexof

我试图阅读一个大文本文件,大约10千兆字节。 我想找到最后一个字符串。

例如下面是5行的样本,第2行和第5行是相同的字符串 我想取最后一个,因为它是最新的,并使用streamreader输出到文本文件。

我最好使用正则表达式,还是最好使用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 个答案:

答案 0 :(得分:0)

我认为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