Fonction de decoupe de chaine, grace a instr

Contenu du snippet

C'est une fonction utilisant InStr pour trouver le nom d'un fichier avec ou sans extention à partir d'une Adresse complète.

Il y a une fonction intéressante, la fonction Découpe qui permet de découper un peu comme on veut une chaine de charactères. (Il faut l'étudier bien qu'elle soit commentée)

Source / Exemple :


Option Explicit

Public Function RcpNom(Adresse As String, Optional AcExt As Boolean = True) As String

    If (Len(Adresse) < 4) Or (InStr(Adresse, "\") = 0) Then Exit Function
    'Si l'adresse contient moins de 4 caractères ou aucun anti-slash ("\") il quitte la fonction
    
    If AcExt Then RcpNom = Decoupe(Adresse, "\") Else RcpNom = Decoupe(Decoupe(Adresse, "\"), ".", True)
    'Si on souhaite récupérer l'extention avec le nom (AcExt=True) il ne découpe que le nom du fichier en entier
    'Sinon il retire aussi l'extention qu'il trouvera à partir du dernier point

End Function

Private Function Decoupe(Chn As String, Chr As String, Optional DcpLft As Boolean = False, Optional Ct As Long = 2000000000) As String

    'Ceci est une fonction qui pourra vous être grandement utile
    'Dans le cas où vous voulez faire une découpe à partir du dernier nombre trouvé
    'ou après le Ct ième charactère Chr s'il existe sinon ce sera le dernier
    
    Dim Nb As Long, Cpt As Long 'Déclaration des variables numériques
    
    
    Nb = InStr(Chn, Chr) 'Renvoi le rang du charactère recherché
    Cpt = 1 'Le premier charactère est trouvé
    Do While (InStr(Nb + 1, Chn, Chr) <> 0) And (Cpt < Ct) 'Si on ne trouve plus de charactère Chr
        'ou que l'on arrive à la position du Ct ième charactères il quitte la boucle
        Nb = InStr(Nb + 1, Chn, Chr) 'Le rang du prochain caractère Chr dans la chaine Chn implémenté en Nb
        Cpt = Cpt + 1 'Incrémentation
    Loop 'Retour au condition de la boucle
    
    If Nb = 0 Then Decoupe = Chn: Exit Function 'Si Nb vaut 0 alors on ne peut pas découper
    'car il y a aucun charactère Chr dans la chaine, donc le renvoi equivaut à la chaine à découper et il quitte la fonction
    
    If DcpLft Then Decoupe = Left(Chn, Nb - 1) Else Decoupe = Right(Chn, Len(Chn) - Nb)
    'S'il s'agit d'une découpe à partir de la gauche il implémente la variable Decoupe en conséquence
    'Sinon il fait de même mais à partir de la droite

End Function

Private Sub Form_Load()

    Dim Adr As String

    Adr = "c:\windows\command1\\\dddff\\€\ef\€\g\hhh\couc..__dddop.mpeg"
    MsgBox RcpNom(Adr), , Decoupe(Adr, "\", True, 3)

End Sub

Conclusion :


Ce n'est pas une grande trouvaille, mais ça peut toujours aider le jour où vous en aurez besoin :p ;)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.