2017-02-02 1 views
0

Je suis en train de créer un programme qui prend une phrase en entrée, puis divise les différents mots. Maintenant, il compare les mots et si un mot se répète alors donne un message correspondant sinon il ne donne aucune correspondance. Mais en exécutant le même, aucun MsgBox n'est affiché.Correspond aux mots présents dans une chaîne. Si un mot se répète dans la phrase, donnez un message "Match", sinon donnez un message "Pas de correspondance"

Voici le script que je l'ai écrit:

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

La question est 'mot = mots = Array (Split (envoyé))' line est faux, 'Split (...)' renvoie un 'Array' donc il n'est pas nécessaire de l'imbriquer dans un autre en utilisant' Array (...) ', au moment où' UBound (words) 'retournera' 0'. Changez cette ligne en 'words = Split (envoyé)'. – Lankymart

Répondre

2

La boucle For ne fonctionnera jamais car le UBound(words) retournera 0.

En effet, la fonction retourne un Split()Array donc il n'y a pas besoin de l'appel Array() supplémentaire qui finit par vous donner un seul élément contenant un autre tableau Array.

La solution est de changer

words = Array(Split(sent)) 

à

words = Split(sent) 

qui résoudra votre problème initial, mais il y a d'autres problèmes avec le code que vous devrez résoudre avant qu'il fonctionne correctement.

+0

Merci, je l'ai eu à travailler .... en utilisant le code ci-dessous ... Merci beaucoup envoyé = "C'est une bonne journée, mais tous les jours est un bon jour" msgbox ("OK") k = split (envoyé) msgbox ("Ok") pour i = LBound (k) à UBound (k) -1 pour j = LBound (k) +1 à UBound (k) \t Si j> i Puis \t \t h = StrComp (k (i), k (j)) \t \t msgbox (k (i) & K (j)) \t \t msgbox (h) \t End If Next suivant – Sunny

+0

@Sunny heureux que vous l'ayez fonctionné mais vous devriez vraiment considérer [l'approche d'Ekkehard.Horner] (http://stackoverflow.com/a/42007074/692942) pour un mécanisme beaucoup plus simple et plus propre. – Lankymart

+0

Yip remercie Lankymart .... yeahi n'a pas pu obtenir son apporach car je n'étais pas au courant de l'objet du dictionnaire. J'ai appris et essayé maintenant. Merci beaucoup encore – Sunny

0

L'outil VBScript pour classer/compter les jetons de types/reconnaissance est le Dictionary.

Démo:

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 

(! Regard ma, pas de boucles imbriquées)

sortie:

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

Meilleure solution définitivement mais elle ne répond pas à la question initiale, je pourrais fournir une solution complète mais j'expliquais pourquoi ils avaient le problème qu'ils ont fait. – Lankymart

+0

remercie Ekkehard.Horner. J'ai dû apprendre à propos de l'objet du dictionnaire afin de comprendre votre méthode.Mais j'ai fait quelque chose de nouveau donc merci beaucoup. – Sunny