Vbscript 匹配字符串中的单词。如果一个单词在句子中重复,他们会给出一个信息;匹配“;,否则,请给我一个信息;“不匹配”;

Vbscript 匹配字符串中的单词。如果一个单词在句子中重复,他们会给出一个信息;匹配“;,否则,请给我一个信息;“不匹配”;,vbscript,qtp,Vbscript,Qtp,我正在做一个程序,它把一个句子作为输入,然后把其中的不同单词分开。现在它比较单词,如果单词重复,则给出消息匹配,否则不匹配。但在执行相同操作时,将显示noMsgBox 这是我写的脚本: Dim sent Dim i Dim j Dim k sent = "Its a good day but every day is a good day" words = Array(Split(sent)) For i = LBound(words) To UBound(words)-1 For j =

我正在做一个程序,它把一个句子作为输入,然后把其中的不同单词分开。现在它比较单词,如果单词重复,则给出消息匹配,否则不匹配。但在执行相同操作时,将显示no
MsgBox

这是我写的脚本:

Dim sent
Dim i
Dim j
Dim k
sent = "Its a good day but every day is a good day"
words = Array(Split(sent))
For i = LBound(words) To UBound(words)-1
  For j = LBound(words)+1 To UBound(words)
    k = StrComp(words(i), words(j))
    If k=0 Then
      MsgBox ("Match")
    Else
      MsgBox ("No Match")
    End If
  Next
Next

For
循环将永远不会运行,因为
UBound(words)
将返回
0

这是因为
Split()
函数返回一个
Array
,因此不需要额外的
Array()
调用,该调用最终将为您提供一个包含另一个数组的单元素数组

解决办法是改变

words = Array(Split(sent))


这将解决您最初的问题,但在代码正常工作之前,您需要解决代码的其他问题。

For循环将永远不会运行,因为
UBound(words)
将返回
0

这是因为
Split()
函数返回一个
Array
,因此不需要额外的
Array()
调用,该调用最终将为您提供一个包含另一个数组的单元素数组

解决办法是改变

words = Array(Split(sent))


这将解决您最初的问题,但在代码正常工作之前,您还需要解决代码中的其他问题。

VBScript用于分类/计数类型/识别标记的工具是

演示:


VBScript用于分类/计数类型标记/识别标记的工具是

演示:


问题是
word=words=Array(Split(sent))
行是错误的,
Split(…)
返回一个
Array
,因此不需要使用
Array(…)
将它嵌套在另一个数组中,此时
UBound(words)
将返回
0
。将该行更改为
words=Split(sent)
。问题是
words=Array(Split(sent))
行是错误的,
Split(…)
返回一个
数组
,因此不需要使用
Array(…)
,此时
UBound(words)
将返回
0
。将该行更改为
words=Split(sent)
。肯定是更好的解决方案,但它不能回答最初的问题,我可以提供完整的解决方案,但我正在解释他们为什么会有这样的问题。谢谢Ekkehard.Horner。为了理解你的方法,我必须了解字典对象。但我确实学到了一些新的东西,所以非常感谢。更好的解决方案肯定不会回答最初的问题,我可以提供一个完整的解决方案,但我解释了他们为什么会有这样的问题。谢谢Ekkehard.Horner。为了理解你的方法,我必须了解字典对象。但是我确实学习了一些新东西,所以非常感谢。谢谢,我让它工作了…使用下面的代码…感谢lot sent=“这是一个好日子,但每天都是好日子”msgbox(“OK”)k=split(sent)msgbox(“OK”)对于I=lbound(k)到ubound(k)-1对于j=lbound(k)+1到ubound(k)如果j>I,那么h=strcomp(k(k,k)(j) msgbox(k(i)和k(j))msgbox(h)如果是下一个,则结束next@Sunny很高兴你工作了,但你真的应该考虑一个更简单和更干净的机制。Yip谢谢LakykyMal.Yaai无法得到他的分配,因为我不知道字典对象。我现在学习和尝试了。非常感谢,我得到它工作…使用下面的代码…谢谢很多。ent=“这是一个好日子,但每一天都是好日子”msgbox(“OK”)k=i=lbound(k)到ubound(k)的分割(发送)msgbox(“OK”)-1对于j=lbound(k)+1到ubound(k)如果j>i那么h=strcomp(k(i),k(j))msgbox(k(i)和k(j))msgbox(h)如果是下一个,则结束next@Sunny很高兴你工作了,但你真的应该考虑一个更简单和更干净的机制。Yip谢谢LangkyMal.…Yaai无法得到他的分配,因为我不知道字典对象。我现在学习和尝试了。非常感谢。
Option Explicit

Dim a : a = Split("Its a good day but every day is a good day")
Dim d : Set d = CreateObject("Scripting.Dictionary")
Dim w
For Each w In a
    d(w) = d(w) + 1
    If 1 < d(w) Then
       WScript.Echo "more than one " & w & " - could 'Exit For'"
    End If
Next
For Each w In d.Keys()
    WScript.Echo w, d(w)
Next
cscript 42004404.vbs
more than one day - could 'Exit For'
more than one a - could 'Exit For'
more than one good - could 'Exit For'
more than one day - could 'Exit For'
Its 1
a 2
good 2
day 3
but 1
every 1
is 1