begin process at 2012 02 12 05:21:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > FONCTION DE DECOUPE DE CHAINE, GRACE A INSTR

FONCTION DE DECOUPE DE CHAINE, GRACE A INSTR


 Information sur la source

 Description

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

  • 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
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 ;)


 Sources du même auteur

Source avec Zip Source avec une capture MODULE DE DECOUPAGE ELLIPTIQUE DE CONTROLS : TEXT, FORM, COM...
Source avec Zip Source avec une capture BASE DE GESTIONNAIRE DE FICHIER, A FINIR TRES SIMPLEMENT
Source avec Zip Source avec une capture EFFET POUR FORM, CHANGEMENT DE FOND, D'ICONE ET TITRE DEROUL...
Source avec Zip Source avec une capture EFFET SUR DES PICTUREBOX : CODE TRES SIMPLE, FLUIDE ET COMME...
FONCTION SWAP POUR NOMBRE ENTIER

 Sources de la même categorie

Source avec Zip Source avec une capture MASQUE DE SAISIE NUMÉRIQUE par acive
Source avec Zip Source .NET (Dotnet) COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE par alpha5
Source avec Zip Source avec une capture HM - BLOCNOTE par hassenmajor
Source .NET (Dotnet) [VB.NET] CLASS DE COLORATION SYNTAXIQUE "ON THE FLY" par huzima
Source avec Zip Source avec une capture PERSONNALISEZ VOS BOÎTES DE MESSAGE (X)HTML par medjahedScript

Commentaires et avis

Commentaire de liquide le 03/09/2004 12:53:53

salut, tu dis que ca peut trouver le nom de fichier, mais avec un split je fais la meme chose, je n'ai juste qu'a prendre le "Ubound" du split.

explique moi en quoi c'est mieux que cette fonction ?, je ne vois pas trop.

Commentaire de Renfield le 03/09/2004 13:29:10 administrateur CS

ne pas utiliser de Split a tours de bras, Liquide, c'est pas très bien, pour les performances...

tu alloues un tableau de chaines
tu lances Split, qui fait sa cuisine et alloue de l'espace mémoire etc...
ensuite, tu utilises des fonctions sur ton tableau, etc...

alors qu'un simple Instr va regarder séquentiellement les caractères jusq'u trouver un caractère précis (ce que fait de toute facon le Split pour trouver les séparateurs)

Commentaire de gandalfkhorne le 03/09/2004 13:45:46

C'est un split avancé, de plus quand tu peux récupérer le dossier ou le fichier se trouve aussi, et bien d'autre chose.

Sinon pour InstrRev je ne connais pas, je travaillais sous VB5 et la j'ai pas la MSDN de VB6 :(.

Commentaire de liquide le 03/09/2004 14:57:57

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.

Commentaire de econs le 03/09/2004 15:25:51 administrateur CS

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.

Commentaire de Renfield le 03/09/2004 16:50:14 administrateur CS

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....

Commentaire de gandalfkhorne le 04/09/2004 11:53:23

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".

Commentaire de liquide le 04/09/2004 14:12:04

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.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales