两个忽视的问题
1,大小写。2,源字符串含有“\e”字符,不适合\Q \E,表达式。
现已修改okFunc _UDF1()
$Error_Txt = FileOpen(@ScriptDir & "\Error.txt", 1)
FileWriteLine($Error_Txt, @YEAR & "/" & @MON & "/" & @MDAY & "---" & @HOUR & ":" & @MIN)
FileWriteLine($Error_Txt, "-------------- WinAPIEx 函数替换失败记录 -------------------")
Local $k, $s0, $sFile, $iMax = UBound($aWinAPIEx) - 1
For $k = 0 To $iMax
If $aWinAPIEx[$k][0] = '' Then ContinueLoop
$sFile = $Txt_path & $aWinAPIEx[$k][2] ;当前处理的文件
Local $Str = String(FileRead($sFile)), $Str1 = $Str
While 1
$s1 = StringRegExpReplace($aWinAPIEx[$k][1], '\${|\$\d+|\\', '\\$0')
If StringInStr($aWinAPIEx[$k][0], '\e') Then
$s0 = StringRegExpReplace($aWinAPIEx[$k][0], '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)', '\\$1') ;转义
$Str = StringRegExpReplace($Str, '(?mi)^\h*' & $s0 & '\h*(?=\v|$)', $s1, 1)
Else
$s0 = StringRegExpReplace($aWinAPIEx[$k][0], '^\h*|\h*$', '')
$Str = StringRegExpReplace($Str, '(?mi)^\h*\Q' & $s0 & '\E\h*(?=\v|$)', $s1, 1)
EndIf
If Not @Error And @Extended = 0 Then
FileWriteLine($Error_Txt, "$aWinAPIEx[" & $k & "][0] = '" & $aWinAPIEx[$k][2] & "'")
$Error_count += 1
EndIf
If ($k = $iMax) Or ($aWinAPIEx[$k + 1][2] <> $sFile) Then ExitLoop ;如果下一个文件不是当前文件则退出该文件的全部操作
$k += 1 ;为了接着处理当前文件的下一组数据,不会多余的循环
WEnd
If $Str = $Str1 Then ContinueLoop ;未替换一次
Local $hFO = FileOpen($sFile, 2)
FileWrite($hFO, $Str)
FileClose($hFO)
Next
EndFunc ;==>_UDF1
|