51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5375|回复: 14
打印 上一主题 下一主题

[原创] 用VBS如何从记事本中读取特定字符

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-6-10 20:54:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QTP时, 我想从记事本中读取特定位置的字符
            请问用vbs怎么处理

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-6-10 21:00:56 | 只看该作者
1.读取每行数据
2.进行数据匹配
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-6-10 23:03:36 | 只看该作者
麻烦能不能具体点,我算的上是新手
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-6-11 09:03:02 | 只看该作者
分别找到"唐家山"和"湖"的位置,然后截取就可以了.
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-6-11 09:38:03 | 只看该作者
用instr 函数一行行去匹配,匹配到后,得到字符所在行的位置,然后再把所要的值再输出嘛

[ 本帖最后由 xiaonan 于 2008-6-11 09:39 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-6-11 11:07:45 | 只看该作者
原帖由 xiaonan 于 2008-6-11 09:38 发表
用instr 函数一行行去匹配,匹配到后,得到字符所在行的位置,然后再把所要的值再输出嘛


嗯,办法真的很好,学习了
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-6-12 10:56:31 | 只看该作者
感谢回帖,可能我没说清楚
    我说的具体点:
     “唐家山堰塞湖” 这句 我只知道有“唐家山”与“湖”,而它们之间的字符我不知道,也不知道有几个字符;
   如何提取“唐家山”与“湖”之间的字符串呢(重声明:“堰塞”这个字符串我事先不知道)
     “唐家山********湖”            提取*******
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-6-12 14:45:59 | 只看该作者
1.在写入代码中加入分隔符

2.用Split函数取到值

3.最后用StrComp函数进行对比

不知道是否有帮助解决这个问题。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2008-6-12 16:37:10 | 只看该作者
实际上比较复杂 ,能不能用正则表达式做啊
   我不是很懂的
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-6-12 17:50:11 | 只看该作者
可以用InStr和Mid函数,参见:
http://blog.csdn.net/Testing_is_ ... /06/12/2540629.aspx

[ 本帖最后由 陈能技 于 2008-6-12 21:02 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-6-12 23:26:29 | 只看该作者

回复 10# 的帖子

LS的方法很不错,思路也很好,但是函数如果要通用的话,却还是存在比较大的缺陷的~先看下LS的函数吧~
  1. Function getStrBetween(Str,StartStr,EndStr)  
  2. StartStrPos = Instr(Str, StartStr)+Len(StartStr)   
  3. EndStrPos = Instr(Str,EndStr)   
  4. Length = EndStrPos  - StartStrPos   
  5. Res= Mid(Str,StartStrPos,Length)   
  6. getStrBetween = Res
  7. End Function

  8. Str = "如何获取两个字符串之间的字符串?"
  9. StartStr ="获取"
  10. EndStr = "字符串"
  11. Res = getStrBetween(Str,StartStr,EndStr)
  12. Msgbox Res
复制代码
如果这个时候我目标字符串稍微改变下,让EndStr存在于StartStr之前,比如将Str改为
Str = "字符串操作之如何获取两个字符串之间的字符串"
其它部分不变,那么就会直接报错了~~

解决方案也很简单,只需要把
EndStrPos = Instr(Str,EndStr)  
改为
EndStrPos = Instr(StartStr,Str,EndStr)   
即可
当然,如果再全面一些,我们最好再考虑下StartStr或EndStr在目标Str中不存在的情况,尤其是EndStr,不存在的时候还是要给出相应的返回值的~~
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2008-6-13 19:12:36 | 只看该作者
问题已解决
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2008-6-13 19:17:13 | 只看该作者
感谢大家的帮忙,问题已解决,实际上我读取的是xml文件中的字符串
附上 我写的代码和xml文件(.rar)     希望大家能多多指教


Const forreading=1,forwriting=2,forappending=8
Const trisateusedefault=-2,tristatetrue=-1,tristatefalse=0
Dim fso,f,ts,tr
Set fso=createobject("scripting.filesystemobject")
Set f=fso.opentextfile("e:\channel_info.txt",forwriting,true)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''         
Set doc = XMLUtil.CreateXML()
doc.LoadFile "C:\Program Files\BitMov XM\ChannelList\Channel.xml"
Set root = doc.GetRootElement()
Set QQp= root.ChildElements()
Set QQp1 =QQp.Item(1)
Set dianbo=QQp1.ChildElements()
Set dianbo1 =dianbo.Item(1)
Set dianbo2=dianbo1.ChildElements()
For  k=1 to dianbo2.count()
     Set  movies=dianbo2.item(k)'设置为电影栏或电视剧栏                                                                                                               
     Set child_movies=movies.childelements()  
     count_movies=child_movies.count()             '求有多少节目类别
     Set attribs_total=movies.attributes()
     Set attr_total=attribs_total.item(1)     
      namestr_total=attr_total.name()
      valstr_total=attr_total.value()  
     For    i=1 to count_movies           '外层循环节目的类别数
              Set ch_movies=child_movies.item(i)
              Set ch1_movies=ch_movies.childelements()  
                  Set attribs=ch_movies.attributes()

              Set attr=attribs.item(1)     
              namestr=attr.name()
              valstr=attr.value()      '求出每个节目类别的名字
              count1_movies=ch1_movies.count()   '求出电影栏下每个类别有多少节目
               For  j=1 to count1_movies         '内层循环每个类别下的节目
                            Set ch1_movies=ch_movies.childelements()  ''''以下是求出某个类别下的第“”“j”“”个影片的名字
                        Set ch11_movies=ch1_movies.item(j)                                                           
                        Set attribs_cell=ch11_movies.attributes()

                       Set attr_cell=attribs_cell.item(2)     
                       namestr_cell=attr_cell.name()
                       valstr_cell=attr_cell.value()
                       'msgbox valstr_cell
                               nam=valstr_total&"("&count_movies&")"&";"&valstr&"("&count1_movies&")"&";"&valstr_cell
                              'wait (1)
                      f.writeline nam  '向文件里写入节目名字
               
             Next
    Next
Next
f.close

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2015-6-29 10:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    14#
    发表于 2008-6-14 16:11:22 | 只看该作者
    原帖由 xiaonan 于 2008-6-11 09:38 发表
    用instr 函数一行行去匹配,匹配到后,得到字符所在行的位置,然后再把所要的值再输出嘛



    突然想到一个问题,如果匹配字符串刚好出现在一行的结尾和下行的开始,如果是逐行去匹配的话会不会有一些遗漏?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2008-6-15 20:02:14 | 只看该作者
    学习,不错啊
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-28 16:35 , Processed in 0.086403 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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