Fonction de decoupe de chaine, grace a instr

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 927 fois - Téléchargée 33 fois

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

Ajouter un commentaire

Commentaires

Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

Quelles erreurs ?

si tu parles de ta source, je ne pense pas que ce soit une erreur. elle montre différents procédés.

puis cela permet une discution sur l'utilité, et apporte d'autres moyens, ca permet peut etre a d'autre de découvrir d'autres fonctions, des astuces, enfin, plein de trucs. Faut un commencement.
Des choses sont bonnes, d'autre moins bonnes et on progresse.
Messages postés
70
Date d'inscription
dimanche 11 janvier 2004
Statut
Membre
Dernière intervention
1 octobre 2004

Et c'est quand on fait ce genre d'erreur stupide que l'on aimerais pouvoir les effacées ...

Sinon je suis tout à fait d'accord avec vous j'ai brassé du vent "LoL".
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
la fonction oui, elle pourrait être revue.... elle fait un peu plein de choses....

j'avoues que j'aurais tendance à favoriser le Split, tout depends de l'algo a remplacer, en fait....
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
21
C'est clair qu'avec un Split, c'est fait en 2 lignes. Et encore, une seule devrait suffire ...

Mais bon, au moins avec la fonction de gandalfkhorne, on peut choisir ou pas de récupérer l'extension... c'est déjà un peu mieux.

Renfield > Un Split est beaucoup plus long qu'un Instr .. d'accord, mais la tambouille de gandalfkhorne (avec tous ses IF, While, Instr) est, selon mes tests, plus longue qu'un simple Split.
Messages postés
1018
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

Bin ouais mais je me dis que je n'ai pas besoin de faire tout ca , sur une chaine si peu longue.
pour la mémoire sur le longueur avec un split, quand a coté parfois on voit des tableau de grandeur 500 voire plus, puis une fois rempli on alloue l'espace reel, et puis on recommence ainsi de suite, (j'ai vu) je me dis que le split n'est pas si mal que ca.

Juste le temps de faire cette manip, un fois fait, cette espace est de nouveau libre.

de toute facon, si c'est ce qu'il fait .... pk inventer une procedure si il le fait deja.
Afficher les 8 commentaires

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.