Comparer deux chaines de caractere

Résolu
FrauArfaoui - Modifié par FrauArfaoui le 3/05/2016 à 22:40
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 4 mai 2016 à 23:32
Bonjour,
Je suis debutante en vb et je travail avec vb 6.0, alors, j'ai un probleme de comparaison, j'ai utilise deux methodes:
soit avec if strcomp (ch1, ch2)=0 then
soit avec if ch1=ch2
avec ch1 et ch2 sont deux textbox
alors, mon but est de chercher un mot dans un fichier a acces direct d'enregistrements ( enregistrement a 3 champs) et le mot se trouve dans un textbox.
je vous montre le code:

Private Sub cmdchercher_Click()
Dim succes As Integer
succes = 0
For i = 1 To LOF(2) / Len(user)
Get #2, i, user
If (StrComp(txtchercher.Text, user.mat) = 0) Then
MsgBox "Sahit"
succes = 1
Exit For
End If
Next
If succes = 0 Then
MsgBox "NOT FOUND"

End If


End Sub

Private Sub Form_Load()
Open "C:/Users/DELL/Desktop/Projet Vb/user.txt" For Random As #2 Len = Len(user)
For i = 1 To LOF(2) / Len(user)
Get #2, i, user
lstuser.AddItem user.mat & user.password & user.type
Next
End Sub


Le probleme : meme si la matricule existe il affiche NOT FOUND!
J'ai le meme probleme avec plusieurs cas.
Merci de m'aider.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

8 réponses

NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
3 mai 2016 à 22:28
Bonsoir,

Où et comment est déclaré "user" ?
As-tu vérifié le contenu de user avant la comparaison ? (avec un point d'arrêt et un espion)
0
FrauArfaoui Messages postés 4 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016
3 mai 2016 à 22:34
Bonsoir,
user est declaree dans un module, comme etant une variable Globale
et oui, j'ai meme afficher le contenu de la variable user ! et il affiche correctement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
Modifié par ucfoutu le 4/05/2016 à 02:14
Bonjour,
1) comment a été écrit le fichier C:/Users/DELL/Desktop/Projet Vb/user.txt ? (les lignes de code d'écriture)
2) tant l'écriture que la lecture d'un tel fichier devraient normalement se faire par utilisation d'une structure (probablement une structure User), que l'on ne voit pas, du type :
Private Type toto
ceci As String * 15
cela As String * 30
encore as string * 10
End Type

et tant la lecture que l'écriture devraient s'y référer par
dim User as toto

Ton Len(User) , dans cet exemple, est 55 et chaque enregistrement contient 3 champs : User.ceci, User.cela et User.encore.

Tout cela est parfaitement exposé de manière très claire et assortie d'un exemple concret non moins clair dans l'aide VB6 !
Je viens d'ailleurs de le vérifier : exemple on ne peut plus clair tant à la rubrique Get (pour la lecture) qu'à la rubrique Put (pour l'écriture). Tout y est, de A à Z !!!!


Dans mon exemple : c'est la structure toto, qui devrait être déclarée avant toute procédure (dans la partie déclaration de ton module de Form) et tu devrais t'y référer (dim User as toto) juste avant l'ouverture.
Et j'éviterais à ta place de faire cela au Form_load, en plein chargement. Je le ferais au Form_Activate.

EDIT : j'ose espérer que tu ne confonds pas type personnalisé avec variable et que tu n'as pas créé directement une structure User.

User doit être une variable et se déclarer (par Dim) comme du type personnalisé défini par une structure (toto, dans mon exemple)
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
FrauArfaoui Messages postés 4 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016
Modifié par FrauArfaoui le 4/05/2016 à 11:50
Bonjour,
j'ai declare la structure et la variable user dans un module par public pour que je puisse l'utiliser dans toutes les feuilles de mon projet.

Public Type employe
mat As String * 20
type As String * 20
password As String * 20
End Type
Public user As employe

mais il n y a aucun probleme ni dans le fichier ni dans la structure

le seul probleme est dans la comparaison!
et ouvrir le ficher dans le form load mieux que l'ouvrir a chaque fois quand j'ai besoin de ce fichier

La foction qui permet l'ajout dans le fichier est decrite ci dessous et elle fonctionne normalement

Private Sub cmdajouter_Click()
Dim i As Integer
user.mat = txtmat.Text
user.password = txtpswd.Text
If optadmin.Value = True Then
user.type = "administrateur"
ElseIf optuser.Value = True Then user.type = "utilisateur"
End If
i = LOF(3) / Len(user)
Put #3, i + 1, user
MsgBox "Vous avez ajouter " & txtmat.Text & " mot de passe : " & txtpswd.Text
txtmat.Text = ""
txtpswd.Text = ""
End Sub


Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
4 mai 2016 à 12:35
Pour info les variables de type String * 20 remplissent la chaine d'espace :
"1234"
devient
"1234"+16 espaces
Essayes avec Trim$
0
FrauArfaoui Messages postés 4 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016
Modifié par FrauArfaoui le 4/05/2016 à 21:56
Bonsoir,
Merci ca marche
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
4 mai 2016 à 12:42
Je ne vois rien, dans ta procédure cmdajouter_click, qui ouvre le fichier txt concerné.
Faut-il là également deviner ce que tu as écrit ? D'où "sort" maintenant ton fichier #3 ? De quel chapeau ?
Je ne vois pas non plusd, dans tous tes bouts de code, la moindre comparaison ! De quoi avec quoi ?
0
FrauArfaoui Messages postés 4 Date d'inscription mardi 3 mai 2016 Statut Membre Dernière intervention 4 mai 2016
Modifié par FrauArfaoui le 4/05/2016 à 21:56
Bonsoir,
Merci.
Mais j'ai trouve la solution
"Pour info les variables de type String * 20 remplissent la chaine d'espace :
"1234"
devient
"1234"+16 espaces
Essayes avec Trim$ "
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
Modifié par ucfoutu le 4/05/2016 à 23:36
Bien évidemment

Ceci étant dit, on peut se demander pourquoi tout cela (une structure, un fichier plus gourmand, etc) pour si peu. Tu n'as tout de même pas des centaines d'utilisateurs ...
Regarde ce que fait tout bêtement ceci :
Private Sub Command1_Click()
'je crée des utilisateurs
Open "d:\voila.txt" For Output As #1
Write #1, "111111"; "toto"; "administrateur"
Write #1, "2222"; "titi"; "utilisateur simple"
Write #1, "545"; "tata"; "visiteur"
Close #1
End Sub

Private Sub Command2_Click()
'j'ajoute des utilisateurs
Open "d:\voila.txt" For Append As #1
Write #1, "333"; "bibi"; "utilisateur simple"
Write #1, "ccccc"; "bobo"; "administrateur"
Close #1
End Sub

Private Sub Command3_Click()
'ici : je passe en revue tous les utilisateurs
Open "d:\voila.txt" For Input As #1
Do While Not EOF(1)
Input #1, matricule, mot_de_passe, le_type
MsgBox "matricule : " & matricule & vbCrLf & "mot_de_passe : " & mot_de_passe & vbCrLf & "type : " & le_type
Loop
Close #1
End Sub
Private Sub Command4_Click()
'là, je cherche l'utilisateur "333"
cherche = "333"
Open "d:\voila.txt" For Input As #1
Do While Not EOF(1)
Input #1, matricule, mot_de_passe, le_type
If matricule = cherche Then
MsgBox "matricule : " & matricule & vbCrLf & "mot_de_passe : " & mot_de_passe & vbCrLf & "type : " & le_type
Exit Do
End If
Loop
Close #1
End Sub

Clique dans l'ordre. Tu vas comprendre.


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous