zhengpeipei 发表于 2010-1-12 16:47:09

【在线等待】怎样取这样的数据?

总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))

总裁(CEO);决策一层(JCZ);行政总监(FCZ);张 无忌(副总裁的职位名称。)

总裁(CEO);决策一层(JCZ);行政总监(FCZ);财务经理(CWC);财务处科员(CWY);杨 舒鑫

上面这三组数据,怎样取每个数据中的人名呢?请各位大侠指教一下,多谢!!!

[ 本帖最后由 zhengpeipei 于 2010-1-12 16:59 编辑 ]

zhengpeipei 发表于 2010-1-12 16:57:26

用Array=split(a,“;”)分割每个数据后怎样取出最后一个值?最后一个值取出来后怎样取人名呢?

zhengpeipei 发表于 2010-1-12 16:58:29

:funk:

zhengpeipei 发表于 2010-1-12 16:59:03

在线等待啊

wugecat 发表于 2010-1-12 17:42:06

str="孔 向(人员支持(露娜))"
i= RegExpTest ("\(",str)
msgbox left(str,i)

Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches   
Set regEx = New RegExp      
regEx.Pattern = patrn         
regEx.IgnoreCase = True         
regEx.Global = True         
Set Matches = regEx.Execute (strng)
IfMatches.count=0Then
    RegExpTest=len(strng)
        else
        RegExpTest=Matches(0).FirstIndex
End If
End Function

zhengpeipei 发表于 2010-1-13 09:10:23

多谢wugecat提供的代码,我试试。

dreamever 发表于 2010-1-13 09:49:29

wugecat的头象是大剑吗?

wugecat 发表于 2010-1-13 10:29:13

回复 7# 的帖子

呵呵,是啊.....我很喜欢大剑

dreamever 发表于 2010-1-13 12:58:36

不知道现在大剑的第二季出来了没有,漫画倒是早就有了。

zhengpeipei 发表于 2010-1-13 13:43:38

回复wugecat的帖子

用Array=split(a,“;”)分割每个数据后怎样取出最后一个值?

wugecat 发表于 2010-1-13 13:50:52

回复 10# 的帖子

Array=split(a,“;”)
i=ubound(Array)
str=Array(i)

feiyunkai 发表于 2010-1-13 14:59:32

不用spilt函数获取字符中姓名的方法(自己写的,仅供学习交流)

'以"总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"为例
str="总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"
Callgetname(str)                           
Public function getname(str)
strlength=len(str)                              '获取字符串str的长度
str1length=InStrRev(str,";",strlength)             '取右边第一次出现分号的位置
strname=mid(str,str1length+1,len(str))         '取从右边第一次出现分号后面的所有字符并将值赋给strname ,即:孔 向(人员支持(露娜))
str2length=InStr(1,strname,"(")                  '取strname中第一次出现左括号的位置
If str2length>0 Then                        '如果strname中存在左括号,则取左括号前面的字符,并弹出窗口显示该值
getname=mid (strname,1,str2length-1)
msgbox getname
else                                     '如果strname中不存在左括号,则取整个字符,并弹出窗口显示该值
getname=strname
msgbox getname               
End If
End Function

'getname就是你想要的名字
'.另外因为这里是测试交流论坛,所以在写的代码中最好加上详细的注释,这样才能让新人也很容易看懂

[ 本帖最后由 feiyunkai 于 2010-1-13 15:06 编辑 ]

风雪夜归人 发表于 2010-1-13 15:35:42

str1 = "总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"
str2 = "总裁(CEO);决策一层(JCZ);行政总监(FCZ);张 无忌(副总裁的职位名称。)"
str3 = "总裁(CEO);决策一层(JCZ);行政总监(FCZ);财务经理(CWC);财务处科员(CWY);杨 舒鑫"

Set Re = New RegExp
strReg = ".*;(.*)"

WScript.Echo FindName(strReg, str1) '将str1换为你想要取姓名的字符串就可以了

Set Re = Nothing

Function FindName(strReg, strString)
        strReg2 = "(.*)\(.*"       
        Re.Pattern = strReg
        Re.Global = True       
        strName = Re.Replace(strString, "$1")

        If InStr(1, strName, "(", vbTextCompare) <> 0 Then
                strName = FindName(strReg2, strName)
        End If               
        FindName = strName
End Function

什么也不说了,也没有可以多说的

wugecat 发表于 2010-1-13 16:41:25

回复 13# 的帖子

原来还可以这样的..学习了

风雪夜归人 发表于 2010-1-13 16:50:39

我试了好几次才弄成功,唉,老了。。

wugecat 发表于 2010-1-13 17:10:52

你的那个$1就相当于"孔 向(人员支持(露娜))"么?

风雪夜归人 发表于 2010-1-13 18:17:23

strReg = ".*;(.*)"

$1 相当于满足 strReg 里面匹配到的第一个词,在这里就是 (.*)

因为正则匹配是从后面来的,所以说,.*;就是匹配最后一个;后面的 如“孔 向(人员支持(露娜))”

然后判断里面有无"(", 如果有,继续匹配,取出姓名

zhengdongxia 发表于 2010-1-15 09:13:42

学习了,真长见识啊

feiyunkai 发表于 2010-1-22 17:02:34

回复 13# 的帖子

在QTP里运行你的脚本报错缺少WScript对象,保存为VBS文件也报错,错误的参数个数

james.zhong 发表于 2010-1-26 14:17:53

:) 值得学习!
页: [1] 2
查看完整版本: 【在线等待】怎样取这样的数据?