blankboy 发表于 2012-4-19 18:18:13

[已解决]关于文本解析,stringsplit函数的疑问

本帖最后由 blankboy 于 2012-5-2 11:28 编辑

stringsplit()是用来拆分字符串的.返回的是拆分好的数组.我这里想用空格拆分,但是当有多个空格时,会拆分出空的字符串.具体的测试代码如下:#include<Array.au3>

$str = "a          b"
$s = StringSplit($str,"")
_ArrayDisplay($s)
$ss = ""
For $i = 1 To $s
        $ss = $ss & StringLen($s[$i]) & @CRLF
Next
MsgBox(0,"",$ss)
If StringIsSpace($s) Then
        MsgBox(0,"","yes")
Else
        MsgBox(0,"","no")
EndIf
        在au3中,是不是多个分隔符连在一起都会这样?其实我一直认为这样分割出来的会是空格..结果都是空字符串...卡了一个多小时..都在用stringisspace来判断是否有多个空格,始终不对.
好吧,是我太菜了.帮助文档有时候确实不是万能的..

afan 发表于 2012-4-19 18:40:24

用长度不定的空格拆分字符串,StringSplit 是不合适的,应该用正则#include<Array.au3>
$str = 'a          b'
$a = StringRegExp($str, '\H+', 3)
_ArrayDisplay($a)

user3000 发表于 2012-4-19 18:44:53

东西活学活用才好! 比如你给出的示例中, 可以先清除掉多余的空格再处理吧?
这里我先举个笨拙但易理解的:
#include<Array.au3>
$str = "a          b"
While 1
        If StringInStr($str, '') Then
$str = StringReplace($str,'', ' ')
Else
        ExitLoop
EndIf
WEnd
$s = StringSplit($str," ")
_ArrayDisplay($s)
$ss = ""
For $i = 1 To $s
      $ss = $ss & StringLen($s[$i]) & @CRLF
Next
MsgBox(0,"",$ss)
最后想说, 如果经常性的又想方便的处理各类字符串, 那很有必要学一学正则表达式.
比如上面的相关示例可以这样处理, 更简洁和方便:
#include<Array.au3>
$str = "a          b"
$s = StringRegExp($str, '\H', 3)
_ArrayDisplay($s)
$str = StringRegExpReplace($str, '\h+', ' ')
MsgBox(0, 'Deleted', $str)

afan 发表于 2012-4-19 18:49:25

如果对正则不熟,也可以#include<Array.au3>
$str = 'a          b'
$str = StringStripWS($str, 4)
$a = StringSplit($str, ' ')
_ArrayDisplay($a)

user3000 发表于 2012-4-19 18:50:13

回复 2# afan
刷新第一遍时, 没看到您的回复啊.
回复完再刷新就出来了! 呵呵!

对于有问题者, 越多人插上一脚才好, 尤其是像您这样的大能者!

blankboy 发表于 2012-4-19 18:58:07

回复 2# afan


    嗯,正则在文本处理方面确实是不可回避的坎.自己只是很少用,所以现在没来得及学,到时要大规模处理的时候再学.

blankboy 发表于 2012-4-19 18:59:19

回复 3# user3000


    对空格进行消除用下面a大的函数更好,我查手册的时候粗心了.

blankboy 发表于 2012-4-19 18:59:58

回复 4# afan


    对于没有正则基础的来说,这确实是比较优的解决方法.

user3000 发表于 2012-4-19 19:08:38

回复 7# blankboy
惭愧, 用惯了正则, 一时真想不起 StringStripWS 这函数.
如果是空格, 当然用 StringStripWS 来合适!
就怕是别的字符了!

xms77 发表于 2012-4-19 21:37:58

回复 4# afan
4 = 删除每个字符之间的双空格(或更多)
原来用StringStripWS这个函数一直以为是消除字符串中的所有空格,原来4的功能还能去除多空格只保留一个空格,又加深学习了。
我看帮助文件不仔细啊!感谢Afan大大。

xms77 发表于 2012-4-19 21:40:19

回复 3# user3000
学习了,好多方法,异曲同工!

whitehead 发表于 2012-4-19 23:25:24

东西活学活用才好! 比如你给出的示例中, 可以先清除掉多余的空格再处理吧?
这里我先举个笨拙但易理解的:
...
user3000 发表于 2012-4-19 18:44 http://www.autoitx.com/images/common/back.gif
第一个看懂了,第二个里的\h是什么含义?

user3000 发表于 2012-4-19 23:53:23

回复 12# whitehead

第二个是正则啊, \h 任何的水平空白字符+ 代表一个或多个此字符
这是正则基础, 你直接点这里的 StringRegExp就能看到详细说明啦!

shqf 发表于 2012-4-20 10:17:11

回复 4# afan


学习了,这方法也不错唉。以前还真没注意到时这个函数。

whitehead 发表于 2012-4-20 18:27:51

回复whitehead

第二个是正则啊, \h 任何的水平空白字符+ 代表一个或多个此字符
这是正则基础, 你直 ...
user3000 发表于 2012-4-19 23:53 http://www.autoitx.com/images/common/back.gif

惭亏,谢谢user3000兄指教
页: [1] 2
查看完整版本: [已解决]关于文本解析,stringsplit函数的疑问