Usuń rozszerzenie pliku i ścieżkę z ciągu znaków w Perlu
Chcę uzyskać nazwę pliku bez jego ścieżki (jeśli jest częścią łańcucha), a także rozszerzenie.
Na przykład:
/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"
Więc w zasadzie, chcę usunąć wszystko przed i włącznie z ostatnim"/", jeśli obecny, a także ostatni"."wraz z wszelkimi meta znakami po nim.
Przepraszam za takie pytanie nowicjusza, ale jestem nowy w Perlu.
27
Author: Eugene Yarmash, 2010-09-08
3 answers
Do przenoszenia nazwy bazowej pliku z pełną ścieżką, polecamFile::Basename
moduł, który jest częścią rdzenia.
Aby zrobić heurystykę na rozszerzeniach plików, wybrałbym Wyrażenie regularne typu
(my $without_extension = $basename) =~ s/\.[^.]+$//;
37
Author: rafl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 13:18:09
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 13:18:09
Chociaż inni odpowiedzieli, po przeczytaniu trochę na basename na odpowiedź rafla:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
Wydaje się rozwiązywać problem w jednej linii.
Czy są z tym jakieś problemy, w przeciwieństwie do innych rozwiązań? 16
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-08 13:03:10
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-08 13:03:10
Możesz to zrobić za pomocą prostych podstawników:
$name =~ s{.*/}{}; # removes path
$name =~ s{\.[^.]+$}{}; # removes extension
Ten przykład zakłada, że {[1] } jest separatorem ścieżek.
14
Author: Eugene Yarmash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-08 13:54:29
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-08 13:54:29