找回密码
 加入
搜索
楼主: 131738

[AU3基础] (已解决)请 afan 帮助修改正则替换代码, 谢谢!

 火... [复制链接]
发表于 2012-3-15 19:23:03 | 显示全部楼层
为什么我看了2遍问题还是没看懂:(
大叔应该直接发个错误的图+你需要替换成什么样的图
估计afan老大就能瞬间解决了 - -
 楼主| 发表于 2012-3-15 19:32:45 | 显示全部楼层
看了半天,感觉逻辑上有问题。
按理说一个文件应该全部数组轮询替换完了之后一次写入,而你这个似乎在数组 ...
afan 发表于 2012-3-15 18:56


不懂这些,我当初思路是 $i = o to 数组元素总数 循环,
应该是一个循环处理一个数组索引,如此循环到完成。
给的代码我测试,有问题再请教,谢了!
发表于 2012-3-15 19:43:33 | 显示全部楼层
不懂这些,我当初思路是 $i = o to 数组元素总数 循环,
应该是一个循环处理一个数组索引,如此循环到 ...
131738 发表于 2012-3-15 19:32



    需要注意一点,我并未做判断替换字符的转义处理,如果替换字符里面含有“\”等需要先转义,否则会丢失
发表于 2012-3-15 19:50:56 | 显示全部楼层
太高深了的东东,支持顶一下
发表于 2012-3-15 20:14:55 | 显示全部楼层
加上替换字符的转义,以防万一
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();定向搜索文本体会
        Local $k, $i, $s0, $s1, $sFile
        For $k = 0 To UBound($aWinAPIEx) - 1
                $sFile = $aWinAPIEx[$k][2]
                If $sFile = '' Or Not FileExists($sFile) Then ContinueLoop
                Local $Str = String(FileRead($sFile)), $Str1 = $Str
                For $i = 0 To UBound($aWinAPIEx) - 1
                        If $aWinAPIEx[$i][0] = '' Or $aWinAPIEx[$i][2] <> $sFile Then ContinueLoop
                        $s0 = StringRegExpReplace($aWinAPIEx[$i][0], '^\h*|\h*$', '')
                        $s1 = StringRegExpReplace($aWinAPIEx[$i][1], '\${|\$\d+|\\', '\\$0')
                        $Str = StringRegExpReplace($Str, '(?m)^\h*\Q' & $s0 & '\E\h*(?=\v|$)', $s1, 1)
                Next
                If $Str = $Str1 Then ContinueLoop ;未替换一次
                Local $hFO = FileOpen($sFile, 2)
                FileWrite($hFO, $Str)
                FileClose($hFO)
        Next
EndFunc   ;==>_UDF1
发表于 2012-3-15 20:21:59 | 显示全部楼层
比如,如果
$aWinAPIEx[73][1] = '        $SHGSI_ICON --- 测试替换 c:\xx\sv 成员$0 、$1、${0} 字符' ;替换文本

如不加判断则会替换成
$SHGSI_ICON --- 测试替换 c:xxsv 成员        $SHGSI_ICON 、、        $SHGSI_ICON 字符

加了判断则可以原色替换
$SHGSI_ICON --- 测试替换 c:\xx\sv 成员$0 、$1、${0} 字符
 楼主| 发表于 2012-3-15 21:30:19 | 显示全部楼层
回复 21# afan

可能你没注意到我的数组太大,
Global $aWinAPIEx[8889][3]
或者 StringRegExpReplace() 只能先将文本文件的内容全部读入变量,才能替换,
整体测试,错误没有了,但耗时 16分26秒, 而我有错误的脚本只需 1分15秒

StringRegExpReplace() 不能单行操作吗?
发表于 2012-3-15 21:34:56 | 显示全部楼层
回复 22# 131738


    不管怎样操作都需要先读取的,而且这个每个文件只需读写一次
我不知道具体的操作,所以无法判断改善效率的地方…
发表于 2012-3-15 21:51:54 | 显示全部楼层
来学习的!可惜看不懂
 楼主| 发表于 2012-3-15 23:04:37 | 显示全部楼层
回复 23# afan

就是汉化au3文档的辅助自动工具,先汉化文档资源 .txt 文本文件,
再用另一个官方提供的脚本将 .txt 文件转换为 .htm 文件,
然后 HTML Help Workshop 编译完成 .chm 文档.
不用上版的 .htm 文件修修补补为下版文档.
这就是我贴子标题的 全新汉化 的含义.

au3 函数的 .txt 文件 400 多, udf 2000 多, APIEx  目前 838 个

1. 耗时长可以接受, 反正也是为打发时间.
2. 如果汉化失败, 我的脚本能记录数组的索引号,便于查找修改
   你修改的脚本,由于是以文件为单位替换(n条数组元素一次替换一个文件), 无法像这样记录.
 楼主| 发表于 2012-3-15 23:09:36 | 显示全部楼层
来学习的!可惜看不懂
hzxymkb 发表于 2012-3-15 21:51


超版不必谦虚撒,你的代码也发过不少了,看不懂是我表述能力所致!呵呵。。。。
发表于 2012-3-15 23:18:06 | 显示全部楼层
回复 25# 131738


    要记录可以在需要的地方直接插入代码就行,比如上面的第23行下面可以插入
If Not @Error And @Extended Then ... ;替换了
不过这里固定的表达式是没有错误的,所以也就不存在记录错误,只有替换了和没替换(未找到要替换的东东)的区别。
 楼主| 发表于 2012-3-15 23:20:00 | 显示全部楼层
回复 23# afan

不是太懂,估计先通过数组收集属于同一个文件的元素到变量,
然后打开这个文件,再用变量替换,再写入文件,
我的单条文本替换也应有读写操作,不知为何时间差距这么大?
 楼主| 发表于 2012-3-15 23:21:30 | 显示全部楼层
回复  131738


    要记录可以在需要的地方直接插入代码就行,比如上面的第23行下面可以插入
If Not  ...
afan 发表于 2012-3-15 23:18


所以这个纪录对我没有应用意义
发表于 2012-3-15 23:24:03 | 显示全部楼层
回复 28# 131738


    你的数组是如何定义的?
如果 $aWinAPIEx[$x][2] 只需要查找 $aWinAPIEx[$x][0] 替换成 $aWinAPIEx[$x][1] 的话那就简单了,也就不需要从头循环,耗时就在这里了。
能否多贴出数组的定义,能包含几个文件的记录我就能明白一二了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-10 06:24 , Processed in 0.070324 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表