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 :

Rechercher les 4 premiers chiffres d'une chaine de caractéres


Sujet :

VBScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 198
    Points : 102
    Points
    102
    Par défaut Rechercher les 4 premiers chiffres d'une chaine de caractéres
    bonjour

    Peux-ton en VBscript rechercher dans une chaine de caractères alphnumériques , la postion des 4 premiers chiffres
    Exemple :
    prescription_1111_aaaa458.txt
    ou pres3111-bbb103.txt
    ou 3111pres_102aaa.txt

    les 4 premiers chiffres ne sont pas toujours au même endroit

    Merci pour vos réponses

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Chaine = "prescription_1111_aaaa458.txt"
    Cpt = 0
    For i = 1 To Len(Chaine)
        If Asc(Mid(Chaine, i, 1)) >= 48 And Asc(Mid(Chaine, i, 1)) <= 57 Then
           Cpt = Cpt + 1
        End If
        If Cpt = 4 Then
           MsgBox Mid(Chaine, i - 3, 4)
           Exit Sub
        End If
    Next i

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 198
    Points : 102
    Points
    102
    Par défaut
    bonjour
    Merci pour ta réponse
    Peux-tu me dire à quoi correspondent :

    >= 48
    <= 57
    Merci

  4. #4
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    48 = code ASCII de "0"
    57 = code ASCIIde "9"

    ;^)

    Maintenant, une chaine comme "Prescription_1_1111_jskldklf" va retourner une valeur "_111" avec le code ci-dessus...
    S'il faut tenir compte des 4 premiers chiffres contigus, alors il faut adapter.

  5. #5
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Bien vu SLE.

    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
     
    Chaine = "Prescription_1_1111_jskldklf"
    Cpt = 0
    For i = 1 To Len(Chaine)
        If Asc(Mid(Chaine, i, 1)) >= 48 And Asc(Mid(Chaine, i, 1)) <= 57 Then
            Do While Asc(Mid(Chaine, i, 1)) >= 48 And Asc(Mid(Chaine, i, 1)) <= 57
                Cpt = Cpt + 1
                i = i + 1
            Loop
        End If
        If Cpt = 4 Then
           MsgBox Mid(Chaine, i - 4, 4)
           Exit Sub
        Else
            Cpt = 0
        End If
    Next i

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 198
    Points : 102
    Points
    102
    Par défaut re
    Bonjour
    merci pour ta réponse
    J'ai en effet teste
    sur les fichiers suivants :
    qaxs-aa-xcxx_6460_101020110600.pdf
    wpan-ss-aaaa_3311_101020110600.pdf
    prescription_3311_wwww.pdf

    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
    For Each Fichier In FSO.GetFolder(strDirCOPIE).Files
    Cpt = 0
              t1=  Fichier.Name
              For i = 1 To Len(t1)
    		      L=Len(t1)
    			 ' Wscript.Echo "Longueur de la chaine t1 :  "&L 
                  If Asc(Mid(t1, i, 2)) >= 45 And Asc(Mid(t1, i, 2)) <= 57 Then
                  Cpt = Cpt + 1
                  End If
                  If Cpt = 4 Then
                    t3= Mid(t1, i - 3, 4)
    				 WScript.Echo "UF  :  " &t3   &"Fichier :    " &t1
                 End If
             Next  
    next
    Pour certains fichiers , je récupére bien les 4 premiers chiffres
    Pour d'autres, je récupére _331 par exemple ou encore 460_
    Alors qu'il n'y a pas de chiffres devant dans la chaine de caractères

    Tous mes essais sont infructueux
    Merci pour ton aide et tes réponses

  7. #7
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Est-ce que le nom de fichier ne contiendrait pas le path complet ?
    Et as-tu bien tenu compte de la dernière correction de pc75 ?

  8. #8
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Salut,

    une autre alternative est d'utiliser les pauvres RegExp's du moteur Vbscript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    str = "Prescription_1_1111_jskldklf"
    Dim rex : Set rex = New RegExp 
    rex.Pattern="\d{4}"  ' matche 4 chiffre successife
    set matches = rex.Execute(str)
    MsgBox Matches(0) ' index 0 = première occurence

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 198
    Points : 102
    Points
    102
    Par défaut re
    bonjour
    Un grand merci - cela fonctionne
    Effectivement je n'avais pas vu la correction
    Bon Week-End à tous

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/03/2015, 18h51
  2. Réponses: 1
    Dernier message: 09/09/2011, 21h44
  3. [RegEx] Supprimer les espaces au début d'une chaine de caractère
    Par PoichOU dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 18h49
  4. Réponses: 8
    Dernier message: 02/11/2005, 15h16
  5. Extraire les n premiers termes d'une chaine
    Par knecmotet dans le forum C++
    Réponses: 4
    Dernier message: 03/03/2005, 16h05

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