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 :

Suivie de numérotation avec script VBS


Sujet :

VBScript

  1. #1
    Candidat au Club
    Suivie de numérotation avec script VBS
    Bonjour
    Je me lance dans la programmation avec vbs.
    J’aimerais faire un script pour faire un suivie de numérotation de lignes dans un fichier txt.
    Exemple :
    ABC4822
    ABC4823
    ABC4824
    ABC4825
    Je ne sais pas comment commencer, si je dois enlever les 3 premiers caractères ou si je peux faire ma comparaison directement sans modifier ma chaîne de caractère afin de voir si n’y a pas de saut de numérotation.
    Merci
    Cordialement

  2. #2
    Rédacteur/Modérateur

    Salut

    Je te propose une approche qui te permettrait de conserver le formatage de numérotation comme tu l'as décrit, voici le code
    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
    20
    21
    22
    23
    24
    25
    26
    Dim CtnFichier
    CtnFichier = "ABC4822" & vbNewLine & "XYZ4823" & vbNewLine & "RT4825" & vbNewLine & "LM4826HGF"
     
    Dim TblCtnFichier
    TblCtnFichier = Split(CtnFichier,vbNewLine)
     
    Dim NumDeb
    For T = 1 to Ubound(TblCtnFichier)
            NumDeb = RecupValeur(TblCtnFichier(T-1))
            If NumDeb + 1 <> RecupValeur(TblCtnFichier(T)) Then
                  Msgbox "Avant dernier N° = " & RecupValeur(TblCtnFichier(T-1)) & _
                    vbNewLine & _
                    "N° suivant = " & RecupValeur(TblCtnFichier(T))
            End If
    Next
     
    Function RecupValeur(Mot)
            Dim RegularExpressioN, ResulT, Match
    	Set RegularExpressioN = New RegExp
    	RegularExpressioN.Pattern = "([0-9]+)"
            Set ResulT = RegularExpressioN.Execute(Mot)
    	Set Match = ResulT(0)
            RecupValeur = Cint(Match.SubMatches(0))
    	Set Match = Nothing
    	Set RegularExpressioN = Nothing
    End Function
    CtnFichier et la simulation du fichier que tu veux vérifier, la fonction RecupValeur(Mot) récupère la partie chiffre, quelle que soit les caratères qui l'a compose, la boucle For ... Next vérifie s'il n’y a pas de saut de numérotation.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  3. #3
    Candidat au Club
    MERCI,
    je vais tester ce script, cela me donne une bonne base merci

  4. #4
    Candidat au Club
    merci la fonction récupvaleur fonctionne très bien.
    cela fonctionne correctement, par contre j'ai un souci pour remplir mon tableau "TblCtnFichier" a partir de mon fichier txt.
    j'ai essayer de le remplir en lisant ligne par ligne avec une boucle sur mon fichier txt mais cela bug.

    une solution a me proposer?

    merci

  5. #5
    Rédacteur/Modérateur

    Re

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Function RecupFichier(CheminNomDuFIchier)
    	Dim oFso, f
    	Set oFso = CreateObject("Scripting.FileSystemObject")
    	 'Ouverture et lecture et découpe par ligne du fichier
    	Set f = oFso.OpenTextFile(CheminNomDuFIchier, 1)
            'recuperation d'un tableau de x lignes
            RecupFichier = split(f.ReadAll,vbnewline)
            f.close
            set f = nothing
            set oFso = nothing
    End Function
     
    Function RecupValeur(Mot)
            Dim RegularExpressioN, ResulT, Match
    	Set RegularExpressioN = New RegExp
    	RegularExpressioN.Pattern = "([0-9]+)"
            Set ResulT = RegularExpressioN.Execute(Mot)
    	Set Match = ResulT(0)
            RecupValeur = Cint(Match.SubMatches(0))
    	Set Match = Nothing
    	Set RegularExpressioN = Nothing
    End Function
     
     
    Dim TblCtnFichier
    TblCtnFichier = RecupFichier("C:\MesProgs\En VBScript et HTA\Lire fichier sortie tableau de lignes\Data.txt")
    Dim NumDeb
    For T = 1 to Ubound(TblCtnFichier)
            NumDeb = RecupValeur(TblCtnFichier(T-1))
            If NumDeb + 1 <> RecupValeur(TblCtnFichier(T)) Then
                  Msgbox "Avant dernier N° = " & RecupValeur(TblCtnFichier(T-1)) & _
                    vbNewLine & _
                    "N° suivant = " & RecupValeur(TblCtnFichier(T))
            End If
    Next
    le contenu du fichier Data.txt
    ABC4822, la première ligne avec un chiffre à la fin 1 fois
    ABD4823 2éme ligne
    ABC4825XYZ une autre 3éme ligne ce terminant par un chiffre 13
    4826N° la petite dernière
    il est impératif que le premier chiffre rencontré dans chaque lignes, soit le chiffre à vérifier
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  6. #6
    Candidat au Club
    ok merci, je ne repassais mes lignes récupérées en tableau avec le split.

    un grand merci pour le script et la rapidité.

    cordialement