51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3080|回复: 17
打印 上一主题 下一主题

[原创] 怎么验证一行文字中存在某些字符,请看我代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-5-6 13:23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
date()
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.OpenTextFile("C:\Documents and Settings\Administrator\com.travelsky.angel\logs\EtermLog"&date()&".txt",1)
                logs = txt.ReadAll
If (instrrev(logs,"发送指令SID=81,Scmd=HBPR:CA1111/03MAY10/*PEK,12,HBNB") > 0) then
        reporter.ReportEvent micPass,"pass","pass"
else
    reporter.ReportEvent micfail,"failed","failed"
end if


我需要验证"发送指令SID=81,Scmd=HBPR:CA1111/03MAY10/*PEK,12,HBNB"中的"发送指令SID=81,Scmd=HBPR:,HBNB"存在,因为“CA1111/03MAY10/*PEK,12”这个不好参数化,决定忽略掉着部分,用vbs能实现吗
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-5-6 13:28:51 | 只看该作者
你的不是实现了么?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-5-6 13:38:44 | 只看该作者
原帖由 风雪夜归人 于 2010-5-6 13:28 发表
你的不是实现了么?

我实现的是检索“发送指令SID=81,Scmd=HBPR:CA1111/03MAY10/*PEK,12,HBNB”
我希望检索"发送指令SID=81,Scmd=HBPR:,HBNB"
忽略掉“CA1111/03MAY10/*PEK,12”
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-5-6 13:42:45 | 只看该作者
If instrrev(logs,"发送指令SID=81,Scmd=HBPR") <> 0 AND instrrev(logs,",HBNB") <> 0 Then
End If

这样可以不?分开检测.
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-5-6 13:48:08 | 只看该作者
str1 = "发送指令SID=81,Scmd=HBPR:CA1111/03MAY10/*PEK,12,HBNB"
str2 = "发送指令SID=81,Scmd=HBPR:asdffffffffsdddddddddddd//////////****,HBNBasdf"

aa = "发送指令SID=81,Scmd=HBPR.*),HBNB.*"
Set reg = New RegExp
reg.Pattern = aa
reg.Global = True
reg.IgnoreCase = True
MsgBox reg.Test(str1) '检测str1是否包含aa
MsgBox reg.Test(str2) '检测str2是否包含aa
MsgBox reg.Replace(str1, "$1") '取出str1中匹配部分
MsgBox reg.Replace(str2, "$1") '取出str2中匹配部分

Set reg = Nothing


正则表达式
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-5-6 13:49:17 | 只看该作者
知道中间忽略掉的大概长度吗?
找到前半段后,mid 截出后面剩下的内容,在一定的长度内搜索 后半段的  HBNB
或者找到前半段后,mid 截出之后到那一行的换行符,之后再这个范围里找后半

[ 本帖最后由 skyzhu 于 2010-5-6 14:03 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-5-6 13:50:21 | 只看该作者
原帖由 风雪夜归人 于 2010-5-6 13:42 发表
If instrrev(logs,"发送指令SID=81,Scmd=HBPR")  0 AND instrrev(logs,",HBNB")  0 Then
End If

这样可以不?分开检测.

不行
假设第一行是"发送指令SID=81,Scmd=HBPR。。。。。deaf"
第二行是“发送指令SID=81,Scmd=HBPW。。。。hbnb”
你这样的判断也是pass的吧
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-5-6 13:57:44 | 只看该作者
那就不清楚了,关键是你中间要忽略掉的长度是不是固定的?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-5-6 14:00:57 | 只看该作者
假设忽略长度为 n

将5#中 aa = "发送指令SID=81,Scmd=HBPR.*),HBNB.*"
改为 aa = "发送指令SID=81,Scmd=HBPR.{n}),HBNB.*" 就可以了
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2010-5-6 14:01:13 | 只看该作者
原帖由 风雪夜归人 于 2010-5-6 13:57 发表
那就不清楚了,关键是你中间要忽略掉的长度是不是固定的?

不固定啊
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2010-5-6 14:05:20 | 只看该作者
找到前半段后,mid 截出之后到那一行的换行符,之后再这个范围里找后半
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2010-5-6 14:13:18 | 只看该作者
那就用5楼的脚本嘛,
Set FSO = CreateObject("scripting.FileSystemObject")
Set FS = FSO.OpenTextFile("C:\asdf.txt") '打开txt文件
str1 = FS.ReadAll

aa = "发送指令SID=81,Scmd=HBPR.*),HBNB.*" '因为在正则表达式中.代表除了\n之外的任意字符,所以,要求HBNB和前面的发送指令...在一行
Set reg = New RegExp
reg.Pattern = aa
reg.Global = True
reg.IgnoreCase = True
MsgBox reg.Test(str1)
Set reg = Nothing
FS.Close
Set FS = Nothing
Set FSO = Nothing
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2010-5-6 14:26:20 | 只看该作者
原帖由 风雪夜归人 于 2010-5-6 14:13 发表
那就用5楼的脚本嘛,
Set FSO = CreateObject("scripting.FileSystemObject")
Set FS = FSO.OpenTextFile("C:\asdf.txt") '打开txt文件
str1 = FS.ReadAll

aa = "发送指令SID=81,Scmd=HBPR.*),HBNB.*" '因为在 ...

可不可以
If (instrrev(logs,"发送指令SID=81,Scmd=HBPR") > 0) and (instrrev(logs,"HBNB") > 0) and (发送指令SID=81,Scmd=HBPR”和“HBNB"在同一行)then

红色部分有办法实现吗
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2010-5-6 14:35:06 | 只看该作者
你先用他的正则方法试试,如果你日志里的换行是 vblf 就能成功,只在一行里匹配
但如果是 vbcr 的,那就会串行匹配了
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2010-5-6 14:42:44 | 只看该作者
原帖由 skyzhu 于 2010-5-6 14:35 发表
你先用他的正则方法试试,如果你日志里的换行是 vblf 就能成功,只在一行里匹配
但如果是 vbcr 的,那就会串行匹配了

其实,我没看懂他写的那个
我的if then怎么加啊
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2010-5-6 14:50:07 | 只看该作者
Set FSO = CreateObject("scripting.FileSystemObject")
Set FS = FSO.OpenTextFile("C:\asdf.txt") '打开txt文件
str1 = FS.ReadAll

aa = "发送指令SID=81,Scmd=HBPR.*),HBNB.*" '因为在正则表达式中.代表除了\n之外的任意字符,所以,要求HBNB和前面的发送指令...在一行
Set reg = New RegExp
reg.Pattern = aa
reg.Global = True
reg.IgnoreCase = True
If reg.Test(str1) Then
   '输出结果 成功
Else
   '输出结果 查找不到
End If

Set reg = Nothing
FS.Close
Set FS = Nothing
Set FSO = Nothing

我写脚本不习惯写注释的,因为是英文系统,都没有中文输入法,所以,写脚本的时候如果想办法写注释会非常郁闷...抱歉

[ 本帖最后由 风雪夜归人 于 2010-5-6 14:52 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2010-5-6 14:55:23 | 只看该作者

额,重复发了

str1 = FS.ReadAll
'前面的不写了
'正则:   
aaa = "前段"  &  ".*"  & "后段"   
'  .*  表示匹配任意字符任意长度,除了某个换行符,具体参考正则表达式
If regtest(str1,aaa) then
    存在
end if

Function regtest(str,regstr)
    Set reg = New RegExp
    reg.Pattern = regstr
    reg.Global = True
    reg.IgnoreCase = True
    regtest = reg.Test(str)
    Set reg = Nothing
End Function

[ 本帖最后由 skyzhu 于 2010-5-6 14:56 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2010-5-6 15:05:24 | 只看该作者
谢谢二位,终于成功了,十分感谢
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 18:34 , Processed in 0.087191 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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