Comparer deux chaines de caractere [Résolu]

- 3 mai 2016 à 22:23 - Dernière réponse :
Messages postés
18039
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.
Afficher la suite 

Votre réponse

9 réponses

Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 3 mai 2016 à 22:28
0
Merci
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)
Commenter la réponse de NHenry
Messages postés
4
Date d'inscription
mardi 3 mai 2016
Dernière intervention
4 mai 2016
- 3 mai 2016 à 22:34
0
Merci
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.
Commenter la réponse de FrauArfaoui
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 4/05/2016 à 02:14
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
4
Date d'inscription
mardi 3 mai 2016
Dernière intervention
4 mai 2016
- Modifié par FrauArfaoui le 4/05/2016 à 11:50
0
Merci
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.
Commenter la réponse de FrauArfaoui
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 4 mai 2016 à 12:35
0
Merci
Pour info les variables de type String * 20 remplissent la chaine d'espace :
"1234"
devient
"1234"+16 espaces
Essayes avec Trim$
Messages postés
4
Date d'inscription
mardi 3 mai 2016
Dernière intervention
4 mai 2016
- 4 mai 2016 à 21:44
Bonsoir,
Merci ca marche
Commenter la réponse de NHenry
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 4 mai 2016 à 12:42
0
Merci
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 ?
Commenter la réponse de ucfoutu
Messages postés
4
Date d'inscription
mardi 3 mai 2016
Dernière intervention
4 mai 2016
- Modifié par FrauArfaoui le 4/05/2016 à 21:56
0
Merci
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$ "
Commenter la réponse de FrauArfaoui
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 4/05/2016 à 23:36
0
Merci
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.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.