51Testing软件测试论坛

标题: 【在线等待】怎样取这样的数据? [打印本页]

作者: zhengpeipei    时间: 2010-1-12 16:47
标题: 【在线等待】怎样取这样的数据?
总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))

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

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

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

[ 本帖最后由 zhengpeipei 于 2010-1-12 16:59 编辑 ]
作者: zhengpeipei    时间: 2010-1-12 16:57
用Array=split(a,“;”)分割每个数据后怎样取出最后一个值?最后一个值取出来后怎样取人名呢?
作者: zhengpeipei    时间: 2010-1-12 16:58

作者: zhengpeipei    时间: 2010-1-12 16:59
在线等待啊
作者: wugecat    时间: 2010-1-12 17:42
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)
  If  Matches.count=0Then
    RegExpTest=len(strng)
        else
        RegExpTest=Matches(0).FirstIndex
  End If
End Function
作者: zhengpeipei    时间: 2010-1-13 09:10
多谢wugecat提供的代码,我试试。
作者: dreamever    时间: 2010-1-13 09:49
wugecat的头象是大剑吗?
作者: wugecat    时间: 2010-1-13 10:29
标题: 回复 7# 的帖子
呵呵,是啊.....我很喜欢大剑
作者: dreamever    时间: 2010-1-13 12:58
不知道现在大剑的第二季出来了没有,漫画倒是早就有了。
作者: zhengpeipei    时间: 2010-1-13 13:43
标题: 回复wugecat的帖子
用Array=split(a,“;”)分割每个数据后怎样取出最后一个值?
作者: wugecat    时间: 2010-1-13 13:50
标题: 回复 10# 的帖子
Array=split(a,“;”)
i=ubound(Array)
str=Array(i)
作者: feiyunkai    时间: 2010-1-13 14:59
标题: 不用spilt函数获取字符中姓名的方法(自己写的,仅供学习交流)
'以"总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"为例
str="总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"
Call  getname(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
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
标题: 回复 13# 的帖子
原来还可以这样的..学习了
作者: 风雪夜归人    时间: 2010-1-13 16:50
我试了好几次才弄成功,唉,老了。。
作者: wugecat    时间: 2010-1-13 17:10
你的那个$1就相当于"孔 向(人员支持(露娜))"么?
作者: 风雪夜归人    时间: 2010-1-13 18:17
strReg = ".*;(.*)"

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

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

然后判断里面有无"(", 如果有,继续匹配,取出姓名
作者: zhengdongxia    时间: 2010-1-15 09:13
学习了,真长见识啊
作者: feiyunkai    时间: 2010-1-22 17:02
标题: 回复 13# 的帖子
在QTP里运行你的脚本报错缺少WScript对象,保存为VBS文件也报错,错误的参数个数
作者: james.zhong    时间: 2010-1-26 14:17
值得学习!
作者: 风雪夜归人    时间: 2010-1-26 15:25
原帖由 feiyunkai 于 2010-1-22 17:02 发表
在QTP里运行你的脚本报错缺少WScript对象,保存为VBS文件也报错,错误的参数个数

WScript.Echo  这个是vbscript的语句,换为msgbox或者print就可以了。。
作者: yujie6832    时间: 2010-1-26 17:17
原帖由 风雪夜归人 于 2010-1-26 15:25 发表

WScript.Echo  这个是vbscript的语句,换为msgbox或者print就可以了。。

呵呵,个人觉得PRINT是个多余的产物。。。。我把他重新封装成我自己写的函数了
作者: 风雪夜归人    时间: 2010-1-26 17:42
标题: 回复 22# 的帖子
非也非也,你要用到的时候就知道print有多好用了。。。
举例一下,如果有3个case要调试,要输出错误信息,而且case运行时间比较长,比如1个小时,你不可能一直盯着屏幕看,这种情况下MsgBox就很不和谐了 ,用print,你完全可以放心的去干任何事情。。
作者: yujie6832    时间: 2010-1-26 17:53
原帖由 风雪夜归人 于 2010-1-26 17:42 发表
非也非也,你要用到的时候就知道print有多好用了。。。
举例一下,如果有3个case要调试,要输出错误信息,而且case运行时间比较长,比如1个小时,你不可能一直盯着屏幕看,这种情况下MsgBox就很不和谐了 ,用pr ...

有道理,呵呵,学习了!不过我在调试的时候都没碰到过很长时间的,最多也就10分钟,一般都是看着调试,分享自己写完脚本的愉快,呵呵,也到没想到这点,虽然以前也做过,把500条数据循环打出~看来我要重新把他找回来了,嘿嘿,备用备用
作者: joe_8086    时间: 2010-1-27 10:41
标题: 回复 12# 的帖子
这种方法很好的把匹配的思路在程序中描述出来了。 学习了。
更容易理解啊。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2