找回密码
 加入
搜索
查看: 21338|回复: 10

[AU3基础] [已解决]如何将一行文本按照字符占位来分割成数行?

  [复制链接]
发表于 2013-8-25 12:46:05 | 显示全部楼层 |阅读模式
本帖最后由 ioripalm 于 2013-8-26 16:55 编辑

有一串长文本(字符串),只有一行,穿插着数字,英文,中文,空格。也就是中间没有任何换行符(记事本打开如果没有勾选自动换行就会显示很长的一行),现在我想按照每160个占位符来插入一个换行符,160个是我数出来的,一个英文和数字占一个位置,空格也是一个位置,中文是2个位置。
在记事本里面,将记事本窗口宽度调节到何时大小的时候,正好可以切割这个长文本为我要的文本格式。
我试了AU3的StringMid函数,纯英文数字的行参数160个字符就可以正好达到我的要求,但是遇到有中文的行,160个字符又多了。
有没有什么办法可以分割这行文本?
有点像下面的结构:
竖着看             如果横              不知道             大致的
这段文             着看这              我这么             机构就
字才会             段文字              说大家             像这个
有效果             很难懂              明白吗             样子的


如果没有换行符的话,就是这样:
竖着看             如果横              不知道             大致的这段文             着看这              我这么             机构就字才会             段文字              说大家             像这个有效果             很难懂              明白吗             样子的

以上是纯中文和空格,而且每个位置的中文都是3个字,实际情况是字母,数字,中文,空格混杂,而且字数不一样多,字母数字符号都是半角的!


感谢A大,每次都能解决我的问题!
发表于 2013-8-25 13:04:30 | 显示全部楼层
40个位置,咋么就160个字符正好呢?
发表于 2013-8-25 13:23:21 | 显示全部楼层
你的意思是不是要每40个字符分割换行
$Test = StringRegExpReplace($str, '(.{40,}?)', "'$1'&@CRLF", 0)
 楼主| 发表于 2013-8-25 13:27:18 | 显示全部楼层
本帖最后由 ioripalm 于 2013-8-25 13:30 编辑

回复 2# afan


    不好意思,我说的40个位置,是说我文本切割后的效果,第一行的40的前40个字符和第二行的前40个字符,再加上第三行前40个,第四行前40个,这4段排整齐了竖着看正好是一段可读的文字
有点像下面的结构:
竖着看             如果横              不知道             大致的
这段文             着看这              我这么             机构就
字才会             段文字              说大家             像这个
有效果             很难懂              明白吗             样子的


如果没有换行符的话,就是这样:
竖着看             如果横              不知道             大致的这段文             着看这              我这么             机构就字才会             段文字              说大家             像这个有效果             很难懂              明白吗             样子的
 楼主| 发表于 2013-8-25 13:34:20 | 显示全部楼层
回复 3# lpxx


   我试了以160个字符换行一次,纯英文数字的时候没问题,因为每个英文和数字都只占一个位置也只占一个字符,但是遇到中文,也是占一个位置,但是中文占2个字符,所以这行如果中文越多,分割的效果就惨
发表于 2013-8-25 13:39:13 | 显示全部楼层
Func _LineSplit($Str, $iNum = 40)
        Return StringReplace(StringRegExpReplace(StringRegExpReplace($Str, '(?=[^\x00-\xff])', ChrW(27)), '.{1,' & $iNum & '}', '$0' & @CRLF), ChrW(27), '')
EndFunc   ;==>_LineSplit
 楼主| 发表于 2013-8-25 14:21:13 | 显示全部楼层
回复 6# afan


太复杂了,能给解释一下吗?新手看不懂啊!
发表于 2013-8-25 14:36:03 | 显示全部楼层
Local $Str = '竖着看             如果横              不知道             大致de这1段W             着看这              我这么             机构就字才会             段文字              说大家             像这个有效果             很难懂              明白ma             样子DE' & @CRLF
MsgBox(0, '原字符串', $Str)
MsgBox(0, '分行', _LineSplit($Str, 64))

Func _LineSplit($Str, $iNum = 40)
        Return StringReplace(StringRegExpReplace(StringRegExpReplace($Str, '(?=[^\x00-\xff])', ChrW(27)), '.{1,' & $iNum & '}', '$0' & @CRLF), ChrW(27), '')
EndFunc   ;==>_LineSplit
发表于 2013-8-26 00:27:58 | 显示全部楼层
本帖最后由 netegg 于 2013-8-26 00:31 编辑

这段只能用正则快了,中间的空格数不一样

本帖子中包含更多资源

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

×
发表于 2013-8-26 17:21:35 | 显示全部楼层
学习了,谢谢分享··
发表于 2013-8-30 02:34:51 | 显示全部楼层
只能感慨能人异士的强大
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-26 09:55 , Processed in 0.135424 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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