Comment masquer une partit d'un string

[Résolu]
Signaler
Messages postés
161
Date d'inscription
lundi 28 février 2011
Statut
Membre
Dernière intervention
11 février 2013
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Bonjour,

Le but de se sujet est de découvrir comment masquer une partit d'un string pour pouvoir le réutilisé mais "filtré"...

Je m'explique : je charger dans un string le nom d'un fichier, et se fichier porte une date comme nom : le fichier de janvier 2011 se nomme 0111, et j'aimerais pouvoir séparer mon string en deux string, un (mois) "01" et l'autre (année) "11"

Voila, je pense que le code permettant cela n'est pas sorcier ^^

Merci d'avence

5 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
Jouer avec Left, Mid, Right et Instr.

Petit florilège :

Private Sub Form_Load()
Dim FileName As String
Dim nPos As Long
Dim Mois As Long
Dim Annee As Long
    FileName = "C:\folder\qui\importe peu\capteur solaire 0111.txt"
    nPos = InStrRev(FileName, "")
    If nPos Then
        FileName = Strings.Mid$(FileName, nPos + 1)
    End If
    nPos = InStrRev(FileName, ".")
    If nPos Then
        FileName = Strings.Left$(FileName, nPos - 1)
    End If
    
    If Len(FileName) >= 4 Then
        Mois = Val(Strings.Mid$(FileName, Len(FileName) - 3, 2))
        Annee = 2000 + Val(Strings.Right$(FileName, 2))
    End If
    
    If Mois > 0 Then
        MsgBox MonthName(Mois) & " " & Annee
    End If
End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
On peut également jouer un peu :

Private Sub Form_Load()
Dim FileName As String
Dim Match As Object
Dim Mois As Long
Dim Annee As Long
    FileName = "C:\folder\qui\importe peu\capteur solaire 0111.txt"
    With CreateObject("VbScript.RegExp")
        .Pattern = ".+(\d{2})(\d{2})(?:\..+)?$"
        If .Test(FileName) Then
            Set Match = .Execute(FileName)(0)
            Mois = Val(Match.submatches(0))
            Annee = 2000 + Val(Match.submatches(1))
        End If
    End With
    If Mois > 0 Then
        MsgBox MonthName(Mois) & " " & Annee
    End If
End Sub


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
161
Date d'inscription
lundi 28 février 2011
Statut
Membre
Dernière intervention
11 février 2013

Tien un petit détail à prendre en compte, le nom de mon fichier est précédé de son chemin d'acces, il faut donc dans un premier temps isoler les 4 derniers caractères de ma variable en string contenant le nom de mon fichier...
Messages postés
161
Date d'inscription
lundi 28 février 2011
Statut
Membre
Dernière intervention
11 février 2013

Merci bien, ces codes fonctionnent bien , mais j'ai un peu de mal à comprendre comment ils fonctionnent (surtout le second...)
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
le second.... c'est juste pour jouer avec les expression rationelles (RegExp)...

cf: http://regex.codes-sources.com/

fonctionnel, plus puissant mais plus complexe a comprendre ^^


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp