查找数组中包含的文本序列(不是文字)

时间:2018-03-16 11:22:54

标签: arrays vb.net find

我一直在搜索如何在数组中查找文本,但我找不到解决方案。我已逐行在一个数组中加载.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),但实现起来似乎相当复杂。

1 个答案:

答案 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