【问题标题】:Storing the results of InStr() into an array for use with a VBS loop将 InStr() 的结果存储到数组中以用于 VBS 循环
【发布时间】:2014-07-25 22:00:58
【问题描述】:

我对 vbscript 和编程很陌生(不到一年)。我正在编写一个从数据库返回结果的 ASP 经典页面。数据库中的一个字段返回未格式化的文本字符串。我需要在文本中搜索旁边带有句点的数字。对于每个找到的人,我想开始一个新行,例如:

    comments = "New String 1.blah 2.blah 3.blah 4.blah 5.blah 6.blah"

在研究这个想法并研究堆栈和其他网站时,我想出了以下几点:

  1. 使用 Trim() 修剪左侧的空白区域并在字符串中搜索后跟句点的数字。 n1 = Trim(InStr(cmets, 1&".")) -1
    n2 = Trim(InStr(cmets, 2&".")) -1

  2. 通过减去前一个数字确定编号位置之间的字符数:

    p1 = n1-n0
    p2 = n2-n1
    p3 = n3-n1
    
  3. 使用 vbs Left() 和 Mid() 打印结果

    response.write(Left(comments,n1) & "</br>")
    response.write(Mid(comments,n1,p2) &"</br")
    response.write(Mid(commesnt,n2,p3) &"</br>")
    
  4. 返回结果

新字符串

1.废话

2.废话

3.废话

等等。 等等

当我试图将所有内容存储在变量中以创建函数时,我的困难出现了,这样我就可以传入 cmets 或注释,它会产生正确的输出。

  1. 我对此进行了测试,它成功返回了职位列表。

    For i = 1 to 10
    n= Trim(InStr(comments,i & ".")& "</br>")
    Next
    
  2. 这就是我迷路的地方,正如你会从我不连贯的废话中看到的那样:

问题一:不知道如何将上面的结果设置成vbscript中的动态数组。

    a=Array(n)

问题 2:然后我不确定如何使用该数组来允许我从下一个数组元素中减去一个数组元素以创建 p 变量并为 n 中的每个元素循环它。

    p=a(3)-a(2)
  1. 在我弄清楚这应该是一个简单的问题,循环以下内容以获得所需的结果:

    response.write(Mid(comments,n,p) & "</br>")
    

到目前为止,在我的编程过程中,我几乎可以弄清楚所有事情,但这是我遇到的最复杂的问题。再说一次,我是一个菜鸟程序员,所以要温柔 :) 我感谢你们天才可以提供的任何帮助。

【问题讨论】:

    标签: arrays loops vbscript


    【解决方案1】:

    我不知道您是否可以在 ASP 页面中解决这个问题,但您可以使用正则表达式对象来完成一些更复杂的工作。

    strString = "New String 1.blah 2.blah 3.blah 4.blah 5.blah 6.blah"
    
    Set objRE = New RegExp
    With objRE
        .Pattern    = "\d\.\w+"
        .IgnoreCase = True
        .Global     = True
    End With
    
    ' Test method returns TRUE if a match is found
    If objRE.test(strString) Then
        set match = objRE.Execute(strString)
        ' Next line will show the count of the retuned objects
        'msgbox(match.count)
        for each item in match
            MsgBox item
        next
    End If
    
    Set objRE = Nothing
    

    正则表达式字符串将匹配一个数字,后跟一个句点,然后是一个空格。如果您有更多个位数,您可以将 \d 更改为 \d+?这将在不贪婪的情况下获得更多。

    【讨论】:

      【解决方案2】:

      感谢您提供正则表达式指针。使用 InStr() 函数。这就是我想出的。它在字符串中查找数字后跟句点或数字后跟字母然后是句点的每次出现。然后,它确定每个出现之间的字符数,并使用该数字与 mid() 函数将每个出现和相应的文本打印到新行。

      Set objRegEx = CreateObject("VBScript.RegExp")
          objRegEx.Global = True   
          objRegEx.Pattern = "\d+[.]|\d+[a-z][.]"
      
      str = comments
      Set colMatches = objRegEx.Execute(str)  
      
      If colMatches.Count > 0 THEN
          For Each strMatch in colMatches 
      If i="" then i=0 End if
      chrNum = strMatch.FirstIndex -i
          response.write(mid(str,i,chrNum) & "</br>") 
      i=strMatch.FirstIndex
      Next
      End If
      

      作为一个 VBScript 的菜鸟,我很欣赏批评和建议。如果您在我的代码中看到任何可以改进的地方(甚至只是管家),请告诉我,因为我是 100% 自学成才并且没有接受过正规培训。谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多