本帖最后由 131738 于 2012-3-18 16:39 编辑
谢谢超版 afan 的热心帮助!!!此问题得以解决!
原 a.txt 文件(问题相关部分) 这两行文本的前 11 个字符相同 $SHGSI_ICONLOCATION
$SHGSI_ICON
下面是替换程序的脚本(问题相关部分):Global $aWinAPIEx[8891][3]
$aWinAPIEx[72][0] = ' $SHGSI_ICONLOCATION' ;原文本
$aWinAPIEx[72][1] = ' $SHGSI_ICONLOCATION --- $tagSHSTOCKICONINFO 结构的 szPath 与 iIcon 成员接收请求的请求的路径和图标.' ;替换文本
$aWinAPIEx[72][2] = @ScriptDir & '\txt2htm\txtlibfunctions\A.TXT' ;文件路径
$aWinAPIEx[73][0] = ' $SHGSI_ICON' ;原文本
$aWinAPIEx[73][1] = ' $SHGSI_ICON --- $tagSHSTOCKICONINFO 结构的 iIcon 成员接收请求的图标句柄.' ;替换文本
$aWinAPIEx[73][2] = @ScriptDir & '\txt2htm\txtlibfunctions\A.TXT' ;文件路径
_UDF1()
Func _UDF1();定向搜索文本体会
$Error_Txt = FileOpen(@ScriptDir & "\Error.txt", 1)
FileWriteLine($Error_Txt, @YEAR & "/" & @MON & "/" & @MDAY & "---" & @HOUR & ":" & @MIN)
FileWriteLine($Error_Txt, "-------------- WinAPIEx 替换失败记录 -------------------")
For $k = 0 To UBound($aWinAPIEx) - 1
ProgressSet(Round($Step*$k), Round($Step*$k, 2) & " %");修改进度
If $aWinAPIEx[$k][0] = "" Then
ContinueLoop
ElseIf Not StringInStr($aWinAPIEx[$k][0], Chr(32)) And _
Not StringInStr($aWinAPIEx[$k][0], Chr(9)) Then ; 如果被替换字符串不含空格 或 制表符,则 正则替换
If StringInStr($aWinAPIEx[$k][0], "<i>") Or _
StringRight($aWinAPIEx[$k][0], 1) = ">" Or _
StringInStr($aWinAPIEx[$k][0], "$", 0, 1) Or _
StringRight($aWinAPIEx[$k][0], 1) <> "." Then
$Test = _ReplaceStringInFile($aWinAPIEx[$k][2], $aWinAPIEx[$k][0], $aWinAPIEx[$k][1], 0, 0);替换 htm 文件
If @error Or $Test = 0 Then _Write_Error($k, $aWinAPIEx[$k][2]);拆分路径,提取文件名,写失败记录
Else
$Str = String(FileRead($aWinAPIEx[$k][2]))
$Test = StringRegExpReplace($Str, '(?m)^' & $aWinAPIEx[$k][0] & '(?=[\r\n])', $aWinAPIEx[$k][1], 1)
If @error Or $Test = 0 Then _Write_Error($k, $aWinAPIEx[$k][2]);拆分路径,提取文件名,写失败记录
EndIf
Else
$Test = _ReplaceStringInFile($aWinAPIEx[$k][2], $aWinAPIEx[$k][0], $aWinAPIEx[$k][1], 0, 0);替换 htm 文件
If @error Or $Test = 0 Then _Write_Error($k, $aWinAPIEx[$k][2]);拆分路径,提取文件名,写失败记录
EndIf
Next
FileWriteLine($Error_Txt, "WinAPIEx 替换失败记录: " & $count)
ProgressSet(100, "完成", "WinAPIEx 汉化完毕!")
ProgressOff()
FileClose($Error_Txt)
If $count > 0 Then;如果发生替换错误,
ShellExecute('Error.txt', "", @ScriptDir & "", "open");打开脚本所在目录的 'Error.txt' 文件查看错误
Exit
Else
Exit
EndIf
EndFunc ;==>_ChineseB
脚本执行后, a.txt 文件的结果: $SHGSI_ICON --- $tagSHSTOCKICONINFO 结构的 iIcon 成员接收请求的图标句柄.LOCATION --- $tagSHSTOCKICONINFO 结构的 szPath 与 iIcon 成员接收请求的请求的路径和图标.
$SHGSI_ICON
发生错误:
第一行的前半部分:
{ $SHGSI_ICON --- $tagSHSTOCKICONINFO 结构的 iIcon 成员接收请求的图标句柄. }
应是脚本执行数组索引 [73] 的结果,
第一行的前后部分:
{ LOCATION --- $tagSHSTOCKICONINFO 结构的 szPath 与 iIcon 成员接收请求的请求的路径和图标. }
应是脚本执行数组索引 [72] 的结果,
因为 _ReplaceStringInFile() 没有完全匹配选项,而且设置为只替换首次被发现的,
所以[73]的替换文本被插入到[72]相同字串的后面了. 使希望替换的第二行文本成为空白!
请帮忙解决这样的问题,谢谢!!! |