我一直在搜索如何在数组中查找文本,但我找不到解决方案。我已逐行在一个数组中加载.log文件,所以如果任何一行包含单词“FATAL”,我想做点什么。
使用Array.contains()不起作用,因为它需要是文字的,只是一个带有FATAL的行,在这种情况下它可以工作,但该行就像是
2018-03-16 00:10:44,937 [API.WebService::logFatal():67] [] FATAL data does not exist.
我可以遍历这些行并找到一个我猜的字符串,但文件可能会达到100MB,因此它并不理想。
Dim APIlogger() = IO.File.ReadAllLines("c:\mylog.log")
If APIlogger.contains("FATAL") Then
MsgBox("Ooops!")
End If
任何想法都会非常感激。我正在看ToLookUp(of),但实现起来似乎相当复杂。
答案 0 :(得分:0)
Using z As New System.IO.StreamReader(FileName)
' in case if monitoring file, is good sometimes start from last read point
If z.BaseStream.Length < lastPoz Then lastPoz = 0 ' reset Position if file is removed or somthing
z.BaseStream.Position = lastPoz ' Set Last Know Position
Do While z.EndOfStream = False
Dim LineString = z.ReadLine ' Read Strea line by line , that case dont u can easy handle big file
If LineString.Contains("FATAL") Then ' Find what u need
Debug.Print(LineString) ' do somthing
End If
Loop
lastPoz = z.BaseStream.Position ' Remember last Position to future use, next read for log
End Using
你可以使用linq,但在这种情况下,你需要将所有文件读入内存。
Dim FastalLineList = (From e In System.IO.File.ReadAllLines("FILENAME") Where e.Contains("Fatal")).ToList