maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDernière intervention 9 avril 2010
-
17 févr. 2007 à 18:41
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDernière intervention 9 avril 2010
-
17 févr. 2007 à 19:20
bonjour,
j'aimerai savoir comment faire pour faire fonctionner cette ligne :
If InStr("début de mon texte", "début de mon texte et fin de celui ci") = 1 Then MsgBox "oui"
qui cherche "début de mon texte" dans "début de mon texte et fin de celui ci" mais il faudrait qu'il y ai plusieur valeurs comme "début de mon texte" sans faire plusieur lignes comme
If InStr("la voiture", "est bleu la voiture") = 1 Then MsgBox "oui"
If InStr("manger", "il faut beaucoup manger") = 1 Then MsgBox "oui"
If InStr("attention", "attention à vous") = 1 Then MsgBox "oui"
donc j'ai une liste de phrases dans un fichier texte avec en séparateur ##
la voiture##1
manger##2
attention#3
il faudrait donc que à la place de msgbox "oui" si il trouve l'une de ces clefs qu'il affiche le numéro précis par exemple manger 2 et attention 3
info : j'ai mis des mots comme "la voiture" "manger" et "attention" pour faire simple car pour mon projet sa sera des adresses internet
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 févr. 2007 à 18:48
Salut
Comme expliqué dans l'aide de la fonction Instr, Instr ne renvoie pas 0 ou 1, mais 0 ou l'emplacement où il trouve ton mot.
Il suffit donc de détecter > 0 et non = 1
Sous VB6, pour séparer des chaines grace à un caractère spécial comme tes ##, il est simple d'utiliser la fonction Split qui transforme ta chaine initial en un tableau de chaines découpées, sans les ##.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 févr. 2007 à 18:54
Re
Si tu veux détecter plusieurs mots dans une même chaine, il faut créer une boucle, genre For-Next ou Do-Loop.
Pour que la boucle puisse indexer les mots à chercher, il faudra les stocker dans un tableau de type chaine, genre
Dim aMots(10) As String
Je ne vais pas te faire ton code, ce serait un mauvais service à te rendre.
Relis l'aide des fonctions que je viens de citer et regarde parmi les sources du site, ce sont des fonctions très fréquemment utilisées.
Si tu n'as pas l'aide (pirate !), va sur le site de Microsoft (anglais) http://msdn.microsoft.com/library/default.asp?url=/library/en-us
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDernière intervention 9 avril 2010 17 févr. 2007 à 18:54
es t'il possible de faire ce que je souhaite avec le code de jrivet ? si oui je vois pas trop en fait comme je le dit souvent je suis un débutant ;)
Option Explicit
Private C_Concordance As New Collection
Private Sub Form_Load()
Dim NumFile As Integer
Dim Ligne As String
Dim Split_Ligne() As String
NumFile = FreeFile
Open "C:\Test.txt" For Input As NumFile
While Not EOF (NumFile)
'On lit ligne par ligne le fichier de correspondance
Line Input #NumFile, Ligne
'On "casse" la ligne suivant le séparateur ","
' => toi tu peux mettre "##@##" si tu veux
Split_Ligne = Split(Ligne, ",")
'On ajoute à notre collection l'élément a droite du séparateur
'avec en Clé l'élément de gauche
Call C_Concordance.Add( Trim (Split_Ligne(1)), Trim(Split_Ligne(0)))
Wend
Close NumFile
'Juste pour la présentation
Me.Width = 6915
Text1.Width = 6045
Text2.Width = 6045
Text1.Text = "j'adore les courgettes c'est très tomate en revanche les poivrons c'est poireau"
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
'Si l'utilisateur appuie sur la touche entree du textbox1
If KeyAscii = vbKeyReturn Then Text2.Text = ReplacePhrase(Text1.Text)
End Sub
Private Function ReplacePhrase(ByVal Phrase As String) As String
Dim Mots() As String
Dim i As Integer
'On récupère tout les mots de la phrase
Mots = Split(Phrase)
'Pour chaque motes de la phrase on le remplace
'éventuellement par le mots souhaités
For i = LBound (Mots) To UBound(Mots)
ReplacePhrase = ReplacePhrase & GetConcordance(Mots(i)) & " "
Next
End Function
Private Function GetConcordance(ByVal StrVal As String) As String
On Error GoTo HandleError
'petite fonction permettant de récupérer
'dans la collection l'élément correspondant a une clé
GetConcordance = C_Concordance(StrVal)
Exit Function
HandleError:
'Si la clé est absente => erreur d'execution donc
'la fonction retourne le mot d'entrée
GetConcordance = StrVal
End Function
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 févr. 2007 à 19:03
Ok, je comprends mieux ce que tu cherches.
En fait, il te suffit d'utiliser la fonction Split pour séparer le mot et le chiffre (attention, Split ne fonctionne qu'avec des String)
En faisant un
Dim aTableau() As String
aTableau = Split(sMaChaine, "##")
tu obtiendras :
"attention" dans aTableau(0)
et
"3" dans aTableau(1)
Il te suffira ensuite de stocker ces infos dans une structure te permettant de faire le lien entre les mots et les chiffres, et la Collection est le mieux adapté puisqu'elle permet de faire des recherches d'item par leur nom (et pas uniquement par leurs index comme dans les tableaux)
Regarde donc comment fonctionne les Collections et tu comprendras vite comment les remplir et les utiliser.
Vous n’avez pas trouvé la réponse que vous recherchez ?
On n'a pas besoin de séparateur ni de tout ce qui est en rougle ici :
Open "C:\Test.txt" For Input As NumFile
While Not EOF(NumFile)
'On lit ligne par ligne le fichier de correspondance
Line Input #NumFile, Ligne
'On "casse" la ligne suivant le séparateur ","
'=> toi tu peux mettre "##@##" si tu veux
Split_Ligne = Split(Ligne, ",")
'On ajoute à notre collection l'élément a droite du séparateur
'avec en Clé l'élément de gauche
Call C_Concordance.Add(Trim(Split_Ligne(1)), Trim(Split_Ligne(0)))
Wend
Close NumFile
qui se remplace par
Open "C:\Test.txt" For Input As NumFile
While Not EOF(NumFile)
Input #NumFile, blabla, blibli
Call C_Concordance.Add (Trim(blabla), Trim(blibli)
Wend
Close NumFile
Je l'ai déjà exposé dans une autre discussion de xavier...
maxsecurite2
Messages postés181Date d'inscriptionvendredi 3 janvier 2003StatutMembreDernière intervention 9 avril 2010 17 févr. 2007 à 19:20
je comprend bien ce que tu veut dire jfmarques mais le problème c'est comment faire quand on controle rien vu que le textbox avec le contenu peut changer toute les 2 secondes par exemple donc je le met dans un timer (ton code) mais sa me sort rien du tout enfin si une erreur comme quoi que KeyAscii n'est pas déclaré donc problème :s c'est ok le tableau avec le contenu du fichier txt est créer le contenu est mis dans les chaines en l'occurence 3 chaines
la voiture##1
manger##2
attention#3
comment faire maintenant avec mon timer pour vérifier que "la voiture" "manger" ou bien "attention" est bien dans le textbox ? sachant que la ligne change tout le temps
je pense que il me reste plus que sa comment intérrogation car si j'ai bien compris il faut
1 charger
2 décomposer en chaine avec séparateur
3 je sais pas faire vérifier toute les seconde que le textbox = chaine 1-2 ou 3 ou alors aucune des chaines