51Testing软件测试论坛

标题: 用VBS如何从记事本中读取特定字符 [打印本页]

作者: cbb1982211    时间: 2008-6-10 20:54
标题: 用VBS如何从记事本中读取特定字符
QTP时, 我想从记事本中读取特定位置的字符
            请问用vbs怎么处理
作者: lantianwei    时间: 2008-6-10 21:00
1.读取每行数据
2.进行数据匹配
作者: cbb1982211    时间: 2008-6-10 23:03
麻烦能不能具体点,我算的上是新手
作者: 风过无息    时间: 2008-6-11 09:03
分别找到"唐家山"和"湖"的位置,然后截取就可以了.
作者: xiaonan    时间: 2008-6-11 09:38
用instr 函数一行行去匹配,匹配到后,得到字符所在行的位置,然后再把所要的值再输出嘛

[ 本帖最后由 xiaonan 于 2008-6-11 09:39 编辑 ]
作者: xiaoyaoke    时间: 2008-6-11 11:07
原帖由 xiaonan 于 2008-6-11 09:38 发表
用instr 函数一行行去匹配,匹配到后,得到字符所在行的位置,然后再把所要的值再输出嘛


嗯,办法真的很好,学习了
作者: cbb1982211    时间: 2008-6-12 10:56
感谢回帖,可能我没说清楚
    我说的具体点:
     “唐家山堰塞湖” 这句 我只知道有“唐家山”与“湖”,而它们之间的字符我不知道,也不知道有几个字符;
   如何提取“唐家山”与“湖”之间的字符串呢(重声明:“堰塞”这个字符串我事先不知道)
     “唐家山********湖”            提取*******
作者: heqingbluesky    时间: 2008-6-12 14:45
1.在写入代码中加入分隔符

2.用Split函数取到值

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

不知道是否有帮助解决这个问题。
作者: cbb1982211    时间: 2008-6-12 16:37
实际上比较复杂 ,能不能用正则表达式做啊
   我不是很懂的
作者: 陈能技    时间: 2008-6-12 17:50
可以用InStr和Mid函数,参见:
http://blog.csdn.net/Testing_is_ ... /06/12/2540629.aspx

[ 本帖最后由 陈能技 于 2008-6-12 21:02 编辑 ]
作者: hsjzfling    时间: 2008-6-12 23:26
标题: 回复 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,不存在的时候还是要给出相应的返回值的~~
作者: cbb1982211    时间: 2008-6-13 19:12
问题已解决
作者: cbb1982211    时间: 2008-6-13 19:17
感谢大家的帮忙,问题已解决,实际上我读取的是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
作者: Randall    时间: 2008-6-14 16:11
原帖由 xiaonan 于 2008-6-11 09:38 发表
用instr 函数一行行去匹配,匹配到后,得到字符所在行的位置,然后再把所要的值再输出嘛



突然想到一个问题,如果匹配字符串刚好出现在一行的结尾和下行的开始,如果是逐行去匹配的话会不会有一些遗漏?
作者: lvxdoo    时间: 2008-6-15 20:02
学习,不错啊




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