2

我正在尝试阅读一个大约 10 GB 的巨大文本文件。我想找到最后一次出现的字符串。

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

我最好使用正则表达式还是最好使用 alastindexof来确定它是否是最后一个字符串?

我有很多这样的搜索要做,所以我会创建某种数组并让它自下而上搜索以提高性能。

有人可以指出我正确的方向吗?

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
4

1 回答 1

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
于 2015-05-27T17:28:26.653 回答