IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Recherche de chaine de caratère stricte


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut Recherche de chaine de caratère stricte
    Bonjour,

    Question bête, actuellement je fais un script qui recherche un mot dans un fichier avec la fonction "If instr".

    Dans mon fichier il y a :

    TOTO
    TOTO1
    TOTO2
    TOTO3
    TOTO4
    TOTO5
    Cependant si je cherche "TOTO" il va me sortir toute la liste, ce qui est logique.

    Comment faire pour qu'il me sorte uniquement TOTO au sens strict de ma recherche ?

    En d'autres termes faire un "MATCH" et non un "LIKE".

    Avec un expression régulière ?

    Faut il calculer la longueur ?

    Vos idées sont les bienvenues, merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,


    Je pense qu'une expression régulière fera l'affaire.

    Une question : Si TOTO est toujours suivie d'un chiffre ou autre accollé, une simple comparaison avec une variable égale à "TOTO", fonctionnerait dans le cas strict. Non ?

    EDIT : Avec une regex se serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set objRegex = new RegExp
    objRegex.Pattern = "^TOTO$"
    objRegex.IgnoreCase = False
    Mais je pense qu'une regex est plus utile pour matcher des cas changeants. Là c'est fixe.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    Hello,

    Merci pour ta réponse Miistik, je vais tester avec une regexp.

    En fait dans c'est une liste de noms de serveurs donc les noms sont variables.

    TOTO
    MICKEY01
    TOTO1
    BAMBI1
    TOTO2
    MICKEY04
    TOTO3
    TOTO4
    MICKEY06
    BAMBI3
    TOTO5

    Je vais utiliser une expression régulière pour "matcher" exactement avec ma recherche merci

  4. #4
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Extract "c:\test.txt"
     
    Function Extract(InputFile) 
         Set fso = CreateObject("Scripting.FileSystemObject")   
         Set f = Fso.OpenTextFile(InputFile,1) 
         ReadFile = f.ReadAll 
         Set Reg = New RegExp 
         Reg.Global = True 
         Reg.IgnoreCase = True  
         Reg.Pattern = "\bTOTO\b"  
         For Each Match in Reg.Execute(ReadFile) 
             MsgBox Match.Value
         Next  
     End Function

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    hey hey merci à vous !

    Sauf que le seul problème est que le nom des serveurs n'est jamais le meme en fait :

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reg.Pattern = "\bTOTO\b"
    Ne va pas fonctionner.

    Voila ma boucle de base, elle fonctionne mais c'est largement optimisable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    				Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     
    				Set FichierParcourir = objFSO.OpenTextFile(ExportCAS, ForReading, True)
     
    				Do While FichierParcourir.AtEndOfStream <> True
     
    					Ligne = FichierParcourir.ReadLine
     
    					MonTableau = Split(Ligne, ";")
     
    					Serveur = MonTableau(0)
     
    						If instr(Serveur,strMachine) Then
    							ExistanceRecherche = true
    							'objDialogWindow.document.Body.InnerHTML =  "Recherche :  " & Serveur ' & " OK <br>"	
    							results.value = results.value & Serveur & vbCRLF		
    						End If
    				Loop
    De plus si mon serveur s'appel TOTO, il va me sortir TOTO,TOTO1,TOTO2, ...

    Donc est ce qu'on peut mettre une variable dans une regexp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reg.Pattern = "\b"&Recherhe&"\b"
    Merci à vous.

  6. #6
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Extract "c:\test.txt","TOTO"
     
    Function Extract(InputFile,Recherhe) 
         Set fso = CreateObject("Scripting.FileSystemObject")   
         Set f = Fso.OpenTextFile(InputFile,1) 
         ReadFile = f.ReadAll 
         Set Reg = New RegExp 
         Reg.Global = True 
         Reg.IgnoreCase = True  
         Reg.Pattern = "\b"&Recherhe&"\b"  
         For Each Match in Reg.Execute(ReadFile)
             Extract = Match.Value
             MsgBox Extract
         Next  
     End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherché une chaine contenant des meta-caratères
    Par gary26 dans le forum Langage
    Réponses: 4
    Dernier message: 03/02/2011, 12h32
  2. Réponses: 6
    Dernier message: 09/06/2008, 16h35
  3. Réponses: 2
    Dernier message: 02/03/2007, 13h58
  4. Réponses: 1
    Dernier message: 08/03/2004, 11h35
  5. Recherche de chaine ...
    Par Metal3d dans le forum C
    Réponses: 8
    Dernier message: 27/07/2002, 01h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo