2017-02-02 2 views
0

文章を入力して別の単語を分割するプログラムを作っています。今度は単語を比較し、単語が繰り返されるとメッセージの一致を返します。それ以外の場合は一致しません。しかし同じものを実行すると、MsgBoxは表示されません。文字列内の単語を一致させます。単語が文中で繰り返されると、メッセージ "Match"が返され、そうでなければ "No match"というメッセージが返されます。

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 
+0

問題は、 ''単語=言葉=アレイ(スプリット(送信された))であります'Split(...)'は 'Array'を返しますので、' Array(...) 'を使って別のものにネストする必要はありません。 'UBound(words)'は ' 0 'となる。その行を 'words = Split(sent)'に変更してください。 – Lankymart

答えて

2

UBound(words)0を返しますのでForループが実行されることはありません:

これは私が書いたスクリプトです。

Split()関数がArrayを返すため、余分なArray()呼び出しが必要であるため、別の配列を含む1つの要素の配列が返されるためです。

ソリューションは、あなたの最初の問題を解決します

words = Split(sent) 

words = Array(Split(sent)) 

を変更することですが、あなたはそれが正常に動作する前に対処する必要があります。コードを他の問題があります。

+0

ありがとうございました。以下のコードを使用しています...ありがとうございました sent = "良い日ですが、毎日良い日です" msgbox( "OK") k =分割(送信) メッセージボックス( "OK") J場合(K) \tをUBOUNDするJ = LBOUND(K)+1の場合(K)-1 をUBOUNDに対するI = LBOUND(K)について> Iそして \t \t H = StrComp関数(K(I)、K(J)) \t \tメッセージボックス(K(I)&K(J)) \t \tメッセージボックス(H) \tエンド場合、次 next – Sunny

+0

@Sunnyうまくいけばうれしいですが、はるかにシンプルでクリーンなメカニズムのために[Ekkehard.Hornerのアプローチ](http://stackoverflow.com/a/42007074/692942)を本当に考慮する必要があります。 – Lankymart

+0

私は辞書のオブジェクトを認識していなかったので、Lankymart .... yeahiは彼のapporachを得ることができませんでした。私は今それを学び、試しました。もう一度ありがとう – Sunny

0

タイプ/認識のトークンを分類/カウントするためのVBScriptのツールは、Dictionaryです。

デモ:

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 
+0

解決策は間違いありませんが、最初の質問には答えられませんが、私は完全な解決策を提供することができましたが、なぜ彼らに問題があるのか​​説明していました。 – Lankymart

+0

Ekkehard.Hornerに感謝します。私はあなたの方法を理解するために、辞書オブジェクトを知る必要がありました。しかし、私は何か新しいものを借りてくれたので、とても感謝しています。 – Sunny

関連する問題