[débutant] comparaison chaine de caractères [Résolu]

Messages postés
8
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
21 juin 2007
- - Dernière réponse : jekkdev
Messages postés
8
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
21 juin 2007
- 21 juin 2007 à 11:49
Bonjour,  comme je l'ai précisé dans le titre je suis débutant c'est mon deuxième script en vbs et je dois vérifier qu'une liste de noms (que j'ai sous forme d'un fichier txt : Nom_a_vérifier.txt)  figure bien dans un fichier tiré d'un export de banque de donnée privé sur Exchange.

Nom_a_vérifier.txt

Véronique TERESI
Bérengere GAILLARD
// tous les noms sont formaté de la maniere ci dessus.

ISPRIV 1 2.txt
Mailbox Last Logged on By Size (KB) Total Items Last Logon Time Last Logoff Time 
Aline TURRIN TFSFR\ydiard 902 26 19/06/2007  18:00 19/06/2007  18:00 
Arlette PERRIN TFSFR\aperrin 508 8 20/06/2007  09:58  

Je ne sais pas quelle fonctions utiliser.
il faudrait que je puisse stocker le nom et le prenom d'un user a partir de Nom_a_vérifier.txt et comparer avec les deux premier mots de chaque lignes du fichier ISPRIV 1 2.txt et marquer un . De plus comment spécifier le changement de ligne?

Si quelqu'un a des idée je suis preneur. 

Merci d'avance. 
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
23
3
Merci
 Bonjour à tous

En vbs, avec Fso et Dictionary, le script pourrait être:

Const strFileNom = "D:\Mes_scripts_VBFrance\Test\Nom_a_vérifier.txt"
Const strFilePriv = "D:\Mes_scripts_VBFrance\Test\ISPRIV 1 2.txt" 

Set objFso=Createobject("Scripting.FileSystemObject")
'lecture 1er fichier + création dictionnaire Nom
Set objFile=objFso.OpenTextFile(strFileNom)
Set objDicoNom = CreateObject("Scripting.Dictionary")
nbre_args = 0
Do while not objFile.AtEndOfStream
   strTablNom=Split(objFile.ReadAll , vbCr)
   For i = LBound(strTablNom) To UBound(strTablNom)
       objDicoNom.Add nbre_args, strTablNom(nbre_args) : nbre_args = nbre_args +1
   Next
Loop
objFile.Close
'lecture 2ème fichier + création dictionnaire Priv
Set objFile=objFso.OpenTextFile(strFilePriv)
Set objDicoPriv = CreateObject("Scripting.Dictionary")
nbre_args = 0
Do while not objFile.AtEndOfStream
   strTablPriv=Split(objFile.ReadAll , vbCr)
   For i = LBound(strTablPriv) To UBound(strTablPriv)
       objDicoPriv.Add nbre_args, strTablPriv(nbre_args) : nbre_args = nbre_args +1
   Next
Loop
objFile.Close
Set objFile = Nothing
Set objFso = Nothing

i = ""
'Comparaison des 2 dictionnaires
For i = 0 To objDicoNom.Count -1
    For j = 0 To UBound(objDicoPriv.Items)
        If objDicoNom(i) = Left(objDicoPriv(j), Len(objDicoNom(i))) Then
           MsgBox objDicoNom(i) &vbTab& "objDicoNom" &vbLf& _
                  Left(objDicoPriv(j), Len(objDicoNom(i))) _
                  &vbTab& "objDicoPriv",,"Nom trouvé dans les 2 fichiers"
        End if
    Next
Next

Set objDicoNom = Nothing
Set objDicoPriv = Nothing

MsgBox "FIN"

Possibilité d'utiliser ReDim, Array et Filter à la place du Dictionary.

jean-marc

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 194 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_JMO
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
en VBS, donc tu dois utilise FSO pour lire ton fichier.
FSO sais lire ligne par ligne...

te suffit de faire, en gros :

sBuffer = oTextStream.ReadLine
For i = 0 To Ubound(Noms)
   if Left(sBuffer, len(Noms(i)) = Noms(i) Then
        ...
   End If
Next

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
8
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
21 juin 2007
0
Merci
Fantastique merci à tout le monde pour son aide. Cela fonctionne parfaitement. J'ai pus m'apercevoir que fso offrait d'énormes possibilités en regardant des docs. Il ne me reste plus que quelques optimisation a faire.

Merci Jean marc. J'espère que ca pourra aider d'autres personnes dans mon cas dans le futur.
Commenter la réponse de jekkdev
Messages postés
8
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
21 juin 2007
0
Merci
Juste pour infos après avoir manipuler un peu le script le dernier message dans la boite d'affichage ne peut pas etre fermer. Il contient ceci :

titre fenetre : Nom trouvé dans les deux fichiers
objDicoNom
objDicoPriv

et si je souhaite ecrire par exemple quelque chose comme "OK" par exemple a coté des noms qui se trouvent dans les deux dictionnaire il faut que j'utilise la fonction writeline ? il faut dans le bloc de comparaison que je récupère le noms auquel on en est et que je rajoute OK à ce moment?
Commenter la réponse de jekkdev