stringformat如何加空格两端对齐文本?[已解决]
本帖最后由 cashiba 于 2018-4-30 22:20 编辑Local $S1="无标题 - 新建记事本"
Local $S2="(未命名文档) * SciTE(ACN) "
Local $S3="http://www.autoitscript.com/ - Windows Internet Explorer"
Local $S4="43951789.0000"
ConsoleWrite(StringFormat("[%-56s]",$S1) & @CRLF)
ConsoleWrite(StringFormat("[%-56s]",$S2) & @CRLF)
ConsoleWrite(StringFormat("[%-56s]",$S3) & @CRLF)
ConsoleWrite(StringFormat("[%-56s]",$S4) & @CRLF)
如上,4个字符串中最长的是$S3,为56个字符
其它3个字符与之左对齐,长度小于56的用空格补齐
以达到版面或打印时两端对齐的效果.
但是发现StringFormat对含有中文字符的字符串不好使....
如下:
[无标题 - 新建记事本 ]
[(未命名文档) * SciTE(ACN) ]
[http://www.autoitscript.com/ - Windows Internet Explorer]
[--------------------------------------------------------]
是不是对StringFormat的用法不对呢? 个人理解是因为StringFormat统计字符数时一个汉字为一个字符,但汉字在显示时一个汉字占两个英文字符的宽带,就导致有汉字的句子输出后变长的情况,所以格式控制时的宽度应先减掉汉字数,如下:
Local $S1="无标题 - 新建记事本"
Local $S2="(未命名文档) * SciTE(ACN) "
Local $S3="http://www.autoitscript.com/ - Windows Internet Explorer"
Local $S4="43951789.0000"
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S1)&"s]",$S1) & @CRLF)
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S2)&"s]",$S2) & @CRLF)
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S3)&"s]",$S3) & @CRLF)
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S4)&"s]",$S4) & @CRLF)
Func CHNnum($sData)
$sCHN = StringRegExpReplace($sData, "[\x00-\xFF]", "")
Return StringLen($sCHN)
EndFunc
个人理解是因为StringFormat统计字符数时一个汉字为一个字符,但汉字在显示时一个汉字占两个英文字符的宽带 ...
zldfsz 发表于 2018-4-30 21:22 http://www.autoit3.cn/images/common/back.gif
原来如此....
感谢版主完美的解答!
{:face (88):} 谢谢楼主提供
页:
[1]