找回密码
 加入
搜索
查看: 3280|回复: 4

[系统综合] stringlen统计中英文字符串长度

  [复制链接]
发表于 2013-12-4 20:39:05 | 显示全部楼层 |阅读模式
Local $len = StringLen("我的脚本a")
MsgBox(4096, "字符串长度为:", $len)

结果为5,为什么不是9?如何按一个汉字为两个字符计算?
发表于 2013-12-4 20:47:15 | 显示全部楼层
Local $str = "我的脚本a"
Local $len = StringLen(StringRegExpReplace($str, '[^\x00-\xff]', '  '))
MsgBox(0, StringLen($str), $len)
发表于 2013-12-4 23:45:19 | 显示全部楼层
a大的方法不错,转二进制也可以..效率也还挺快的

$str = 'au3中文论坛!'
MsgBox(0, '', BinaryLen(StringToBinary($str)))
$file = FileRead('C:\Users\Administrator\Desktop\imgUrlList - 副本.txt')
$tm = TimerInit()
$len = BinaryLen(StringToBinary($file))
MsgBox(0, $len, TimerDiff($tm))

$tm = TimerInit()
$len = StringLen(StringRegExpReplace($file, '[^\x00-\xff]', '  '))
MsgBox(0, $len, TimerDiff($tm))

评分

参与人数 1金钱 +30 收起 理由
afan + 30 的确快很多,学习了

查看全部评分

发表于 2013-12-5 09:38:32 | 显示全部楼层
对“字符串”来说应该计算二进制数据大小,对文件来说还应考虑编码采用的是ANSI、UTF-8还是UNICODE。
 楼主| 发表于 2013-12-5 10:43:26 | 显示全部楼层
本帖最后由 yuxw 于 2013-12-5 10:48 编辑

谢谢各位。看来我的问题描述简单了。再补充一下:
两段文本,中、英、数混合:
|长文本0 |长文本1      |长文本2        |
|序号3172|222放大22:lll|33333:44|44444|
想根据第一行|的位置,把下面一行的相应的|线去掉。

想取出第一行的|位置,再与第二|位置对应,对应的上则去掉,否不处理。但是遇到的问题是autoit里汉字做为一个字符计算,实际能对应上的位置就不确定了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-28 23:24 , Processed in 0.088090 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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