Vbscript 匹配字符串中的单词。如果一个单词在句子中重复,他们会给出一个信息;匹配“;,否则,请给我一个信息;“不匹配”;
我正在做一个程序,它把一个句子作为输入,然后把其中的不同单词分开。现在它比较单词,如果单词重复,则给出消息匹配,否则不匹配。但在执行相同操作时,将显示noVbscript 匹配字符串中的单词。如果一个单词在句子中重复,他们会给出一个信息;匹配“;,否则,请给我一个信息;“不匹配”;,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 =
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