Regex 使用excel中的列输入搜索日志文件中的文本

Regex 使用excel中的列输入搜索日志文件中的文本,regex,excel,autoit,file-read,Regex,Excel,Autoit,File Read,我正在尝试使用AutoIt从多个日志文件中提取文本,这些文件的大小超过500 MB,并且要提取的文本位于excel列中。我的FileRead出现问题,导致内存出错。我甚至尝试过FileReadToArray,我认为这会使函数更容易处理这个巨大的字符串。所有文件的总大小约为7.8 GB。最大的文件大小约为800 MB Global $aUserNames[] = _Excel_RangeRead($file,$Worksheet) ; Usernames need to be read fro

我正在尝试使用AutoIt从多个日志文件中提取文本,这些文件的大小超过500 MB,并且要提取的文本位于excel列中。我的FileRead出现问题,导致内存出错。我甚至尝试过FileReadToArray,我认为这会使函数更容易处理这个巨大的字符串。所有文件的总大小约为7.8 GB。最大的文件大小约为800 MB

  Global $aUserNames[] = _Excel_RangeRead($file,$Worksheet) ; Usernames need to be read from Excel
Global $sFolderPath = FileSelectFolder("Select Folder", "")
Global $aFileList = _FileListToArrayRec($sFolderPath, "*.*", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
If @error = 1 Then Exit MsgBox(0, "", "No Folders Found.")
If @error = 4 Then Exit MsgBox(0, "", "No Files Found.")

Local $sRegEx = "(?i)"
For $i = 0 To UBound($aUserNames) - 1
    $sRegEx &= "\b" & $aUserNames[$i] & "\b|"
Next
$sRegEx = StringTrimRight($sRegEx, 1)

Global $Store

For $i = 1 To $aFileList[0]
    $sFileContent = _FileReadToArray($aFileList[$i],$Store)
    If StringRegExp($sFileContent, $sRegEx) Then MsgBox(0, "Info", "One of more users found in file " & $aFileList[$i])
Next

代码由jguinch在AutoIt论坛上提供帮助。

您可以一次读取一行文件,以避免内存问题

For $i = 1 To $aFileList[0]
    $fileHandle = FileOpen($aFileList[$i])
    While True
        $fileLine = FileReadLine($fileHandle)
        If @error Then Exitloop
        If StringRegExp($fileLine , $sRegEx) Then MsgBox(0, "Info", "One of more users found in file " & $aFileList[$i])
    WEnd

Next

您可以尝试使用windows版本的grep或sed来使用regex搜索文件-否则,您可能需要一次读取一行文件