Supprimer l'extension de fichier et le chemin d'une chaîne de caractères dans Perl
je veux obtenir un nom de fichier sans son chemin (s'il fait partie de la chaîne) et aussi l'extension.
Par exemple:
/path/to/file/fileName.txt # results in "fileName"
fileName.txt # results in "fileName"
/path/to/file/file.with.periods.txt # results in "file.with.periods"
donc fondamentalement, je veux enlever n'importe quoi avant et incluant le dernier "/" si présent et aussi le dernier "."avec des méta-caractères après.
Désolé pour un novice question, mais je suis nouveau sur perl.
3 réponses
pour obtenir le nom de base d'un fichier avec un chemin complet, je recommande le File::Basename
module, qui fait partie du noyau.
Pour faire des heuristiques sur les extensions de fichier, j'irais pour une expression régulière comme
(my $without_extension = $basename) =~ s/\.[^.]+$//;
bien que d'autres aient répondu, après avoir lu un peu sur basename la réponse de rafl:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
Semble résoudre le problème en une seule ligne.
Existe-t-il des problèmes liés à cela, contrairement aux autres solutions?
Vous pouvez le faire avec de simples substitutions:
$name =~ s{.*/}{}; # removes path
$name =~ s{\.[^.]+$}{}; # removes extension
Cet exemple suppose que /
est le séparateur de chemin.