J'ai besoin d'extraire le nom de fichier d'un chemin (une chaîne):
par exemple, "C:\dossier\dossier\dossier\fichier.txt" = "fichier" (ou même "fichier.txt" pour commencer)
Essentiellement tout avant et y compris le dernier \
J'ai entendu parler de l'utilisation de caractères génériques à la place de Regex (comme c'est une implémentation étrange dans VBA?), Mais je ne trouve rien de solide.
Bravo d'avance.
Merci à kaveman pour l’aide. Voici le code complet que j'ai utilisé pour supprimer à la fois le chemin et l'extension (ce n'est pas une preuve complète, ne prend pas en considération les fichiers contenant plus de 2 décimales, par exemple. * .Tar.gz)
sFullPath = "C:\dir\dir\dir\file.txt"
sFullFilename = Right(sFullPath, Len(sFullPath) - InStrRev(sFullPath, "\"))
sFilename = Left(sFullFilename, (InStr(sFullFilename, ".") - 1))
sFilename = "fichier"
Je crois que cela fonctionne, en utilisant VBA:
Dim strPath As String
strPath = "C:\folder\folder\folder\file.txt"
Dim strFile As String
strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
InStrRev
recherche la première instance de "\" à partir de la fin et renvoie la position. Right
crée une sous-chaîne à partir de à partir de la droite de longueur donnée, de sorte que vous calculiez la longueur nécessaire à l'aide de Len - InStrRev
Je cherchais une solution sans code. Cette VBA fonctionne dans la barre de formule Excel:
Pour extraire le nom du fichier:
=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))
Pour extraire le chemin du fichier:
=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))
Utiliser Java:
String myPath="C:\folder\folder\folder\file.txt";
System.out.println("filename " + myPath.lastIndexOf('\\'));
Voici une méthode plus simple: a fonction sur une ligne pour extraire uniquement le nom - sans extension de fichier - comme vous l'avez spécifié dans votre exemple :
Function getName(pf):getName=Split(Mid(pf,InStrRev(pf,"\")+1),".")(0):End Function
... alors, en utilisant votre exemple, ceci:
MsgBox getName("C:\folder\folder\folder\file.txt")
résultats:
Dans les cas où vous voulez extraire le nom de fichier tout en en conservant l’extension de fichier , ou si vous voulez extraire le seul chemin , voici deux autres fonctions à une seule ligne :
Extraire le nom de fichier de
x:\path\filename
:Function getFName(pf)As String:getFName=Mid(pf,InStrRev(pf,"\")+1):End Function
Extraire le chemin depuis
x:\path\filename
:Function getPath(pf)As String: getPath=Left(pf,InStrRev(pf,"\")): End Function
Exemples:
( La source )
`Vous pouvez aussi essayer:
Sub filen()
Dim parts() As String
Dim Inputfolder As String, a As String
'Takes input as any file on disk
Inputfolder = Application.GetOpenFilename("Folder, *")
parts = Split(Inputfolder, "\")
a = parts(UBound(parts()))
MsgBox ("File is: " & a)
End Sub
Ce sous peut afficher le nom du dossier de n’importe quel fichier
Vous pouvez utiliser un FileSystemObject pour cela.
Commencez par inclure une référence pour de Microsoft Scripting Runtime ( VB Barre de menus de l'éditeur> Outils> Références ).
Après cela, vous pouvez utiliser une fonction telle que celle-ci:
Function Get_FileName_fromPath(myPath as string) as string
Dim FSO as New Scripting.FileSystemObject
'Check if File Exists before getting the name
iF FSO.FileExists(myPath) then
Get_FileName_fromPath = FSO.GetFileName(myPath)
Else
Get_FileName_fromPath = "File not found!"
End if
End Function
Les objets du système de fichiers sont très utiles pour la manipulation de fichiers, en particulier lors de la vérification de leur existence et de leur déplacement. J'aime les utiliser tôt dans la liaison (instruction Dim), mais vous pouvez les utiliser plus tard si vous préférez (instruction CreateObject).
J'ai également utilisé la suggestion de kaveman avec succès pour obtenir le nom du fichier complet, mais parfois, lorsque mon nom de fichier complet contient beaucoup de points, j’utilisais ce qui suit pour supprimer le bit .txt:
FileName = Left(FullFileName, (InStrRev(FullFileName, ".") - 1))