将InStr()的结果存储到数组中以与VBS循环一起使用

时间:2014-07-16 17:50:52

标签: arrays loops vbscript

我对vbscript和编程一般都不熟悉(不到一年)。我正在编写一个ASP经典页面,它返回数据库的结果。数据库中的一个字段返回未格式化的文本字符串。我需要在文本中搜索旁边有句号的数字。对于每个发现的我想要开始一个新的行,例如:

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

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

  1. 修剪左侧带有Trim()的空白区域,并在字符串中搜索一个数字,后跟一个句点。     n1 =修剪(InStr(注释,1&"。")) - 1     n2 =修剪(InStr(评论,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. 返回结果

  5. 新字符串

    1.blah

    2.blah

    3.blah

    等。 等等

    我遇到的困难是当我试图将所有内容存储在变量中以创建函数时,我只需传入注释或注释即可生成正确的输出。

    1. 我测试了这个并成功返回了一个位置列表。

      For i = 1 to 10
      n= Trim(InStr(comments,i & ".")& "</br>")
      Next
      
    2. 这是我迷失的地方,你会看到我不相干的废话:

    3. 问题1:我不知道如何将上述结果设置为vbscript中的动态数组。

          a=Array(n)
      

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

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

        response.write(Mid(comments,n,p) & "</br>")
        
      2. 到目前为止,在编程中我已经能够解决所有问题,但这是我遇到的最复杂的问题。再说一遍,我是一个noob程序员,所以要温柔:)我感谢你们天才所能给予的任何帮助。

2 个答案:

答案 0 :(得分:0)

我不知道你是否可以在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 +?这会抓住更多,而不是贪婪。

答案 1 :(得分:0)

感谢您使用Regex指针。使用数据库编写100多行是更有效的方法 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%自学并且没有接受过正式培训。谢谢!