找回密码
 加入
搜索
查看: 9320|回复: 17

[网络通信] [以解决]请问这句正则要替换什么?谢谢!!

  [复制链接]
发表于 2010-8-12 19:25:49 | 显示全部楼层 |阅读模式
本帖最后由 131738 于 2010-8-17 00:50 编辑

这是官网作品中的一句代码,正则替换肯定是针对英文的,我不懂正则,不知要替换什么?

查网络有说替换空格用 "\x20" 表示,不知这里的 "[\x0a|\x0d]" 是什么?

如果我将 $sText 的文本值汉化后, 这句语句对脚本运行会有影响吗??

目前我已汉化了部分 $sText 的文本值,结果 GUI 大小显示不正常, GUI 底部文字只显示上半截!
;如果 字符串中没有(=0) @CRLF, 则 正则替换
If StringInStr($sText, @CRLF) = 0 Then StringRegExpReplace($sText, "[\x0a|\x0d]", @CRLF)
afan 还在线上,一定会是你这位正则圣手回答我的,谢谢!!!!
发表于 2010-8-12 19:30:05 | 显示全部楼层
[\x0a|\x0d] 是指一个换行或回车
发表于 2010-8-12 19:35:14 | 显示全部楼层
不知道具体意思,先试试:
If Not StringInStr($sText, @CRLF) Then $sText = StringRegExpReplace($sText, "(?<=[^\r])\n", @CRLF)
 楼主| 发表于 2010-8-12 19:35:25 | 显示全部楼层
回复 2# afan

谢谢,就知道是你!!!

但 @CRLF 不也是换行 和 回车吗!
发表于 2010-8-12 19:38:59 | 显示全部楼层
回复  afan

谢谢,就知道是你!!!

但 @CRLF 不也是换行 和 回车吗!
131738 发表于 2010-8-12 19:35


@CRLF 是回车+换行,我不知道前辈的具体用意,用在哪里… 3#的试了吗?
 楼主| 发表于 2010-8-12 19:50:52 | 显示全部楼层
回复 3# afan

提供的代码在源脚本和汉化脚本中是等效的,看来汉化后显示不正常,

原因不在这里了,我再看看其它地方。。。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-8-12 19:54:43 | 显示全部楼层
回复 6# 131738


    这是哪个例子啊,貌似没见过
 楼主| 发表于 2010-8-12 19:56:05 | 显示全部楼层
回复 7# afan

刚从官网拖回的脚本
 楼主| 发表于 2010-8-12 20:16:15 | 显示全部楼层
回复 7# afan

源码以发到 GUI 区,有兴趣你看看。。。
发表于 2010-8-12 21:05:09 | 显示全部楼层
回复 9# 131738

看了下,初步认为他没有考虑双字节的情况,造成获取字符串的宽度有问题,继而造成高度的不足。
代码太长了,没时间研究哦…

简单解决方法: 在$sMsg最后补适量的 & @CRLF 即可,如:
========第六界面=========
最后的 $sMsg &= "或点击 [X] 按钮时" & @CRLF

========第八界面=========
最后的 $sMsg &= "但无论怎样,20 秒计时完成之后,界面会自动关闭的" & @CRLF & @CRLF
 楼主| 发表于 2010-8-12 21:12:36 | 显示全部楼层
回复 10# afan

到底是高手,这可能就是中、西文字的必须区别对待吧。。。。
发表于 2010-8-12 23:18:21 | 显示全部楼层
回复 11# 131738


    小菜鸟而已~
其实也不用区别对待,从源头上修改获取宽度应该是没问题的,水平有限,看起来费时费力…
如果字符串是固定的,如上简单加 @CRLF 即可解决,如果字符串不是固定的,而是随机或读取产生的,那就只有从源头解决了。
 楼主| 发表于 2010-8-13 01:09:24 | 显示全部楼层
本帖最后由 131738 于 2010-8-13 01:12 编辑

回复 12# afan

其实这个脚本有点意思的, 创建窗口宽度为 1200, 够大的了

但实际并没有显示出这么大的窗口,而是根据字符串的多少,来确定显示窗口的大小,

你的“认为他没有考虑双字节的情况,造成获取字符串的宽度有问题,继而造成高度的不足”判断肯定是正确的

发的代码中,有进度条的窗口我没有汉化,结果汉化后,显示进度条压住了紧随进度条下方的文本,

这就不是添加 @CRLF 能解决的,摸索半天,用空格充足源代码的字节数,这才使进度条不压文本了,

但文本显示就不整齐了,创建进度条,位置参数使用的是变量,且变量又不是常数,我再好好看看它是如何计算的。。。。。

GUICtrlCreateProgress(10, $aRet[2] * 5.5, $aRet[0] - 20, 20)
发表于 2010-8-13 02:05:21 | 显示全部楼层
回复 13# 131738


    在自动生成的界面中再添加控件,比如第七界面的进度条、第八界面的计时Label,其实并无自动的需求,它完全是根据已经规定的$sMsg字符串来定的,并非自动调整,比如原$sMsg英文字符串,你删除下面的行,仅保留两行,同样不会显示进度条。所以,这个是需要自行调整数值的,就像写Gui界面一样。
发表于 2010-8-13 02:18:10 | 显示全部楼层
比如我把进度条用在下面,同样可以
#************************************* 第八界面 size: 500 x 145 - Line height: 13        500 x 119 - 行高: 13
$sMsg = "这个界面的 'Wait' 等待标志参数值被设为 False. " & @CRLF & @CRLF
$sMsg &= "脚本在计时设定的时间内会连续显示这个界面,在计时装置完成之前, "
$sMsg &= "你可以观察到计数装置从 1 增到 20." & @CRLF & @CRLF & @CRLF & @CRLF                 
$sMsg &= "计时装置完成前,单击 [X] 符号按钮,界面将立即关闭 "
$sMsg &= "但无论怎样,20 秒计时完成之后,界面会自动关闭的" & @CRLF & @CRLF
_Toast_Set(5, 0xFF00FF, 0xFFFF00, 0x0000FF, 0xFFFFFF, 12)
$aRet = _Toast_Show("脚本连续显示界面", $sMsg, -20, False)
ConsoleWrite("界面尺寸: " & $aRet[0] & " x " & $aRet[1] & " - " & "行高: " & $aRet[2] & @CRLF)
$hLabel = GUICtrlCreateLabel("", ($aRet[0] - 20) / 2, $aRet[2] * 6, 20, 20)
GUICtrlSetBkColor(-1, -2)
GUICtrlSetColor(-1, 0xFFFF00)
GUICtrlSetFont(-1, 12)
$iCount = 0
$hProgress = GUICtrlCreateProgress(10, 135, 480, 20)
Do
        $iCount += 1
        GUICtrlSetData($hLabel, $iCount)
        GUICtrlSetData($hProgress, $iCount / 20 * 100)
        Sleep(1000)
Until $hToast_Handle = 0
Exit
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 06:57 , Processed in 0.085586 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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