Jemand zu Hause?Leser: 21
(\\)(\w.*)$
($datei = $pfad_und_datei) =~ s/^.*[\\\/]//g;
1 2 3 4
use File::Spec::Win32; my $path = q{ABCDEF\AB1010\datei.txt}; print $path; my $file = (File::Spec::Win32->splitpath($path))[-1];
1 2 3 4
use File::Spec; my $path = q{ABCDEF\AB1010\datei.txt}; print $path; my $file = (File::Spec->splitpath($path))[-1];
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1
2
3
4
5
6
splitpath
Splits a path in to volume, directory, and filename portions. On systems with no concept of volume,
returns ’’ for volume.
($volume,$directories,$file) = File::Spec->splitpath( $path );
($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-04-15T09:10:35 LinuxerWarum ist in Deinen Augen die Verwendung eines Core-Moduls "noch weniger portabel" als eine Regex-Lösung?
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-04-15T09:27:46 pqund file-uploads sind ja ein spezialfall, beidem man nicht weiss, wie ein pfad aufgebaut ist.
2010-04-15T09:27:46 pqund file-uploads sind ja ein spezialfall, beidem man nicht weiss, wie ein pfad aufgebaut ist.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-04-14T14:18:15 pqweiss man nicht, von welchem system der pfad kommt, wie bei einem file-upload, ist es zumindest bei mir so, dass ich eh nur bestimmte dateinamen zulassen will, in dem fall arbeite ich sowieso mit regex.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1 2 3
use File::Basename; my $filename = basename( 'ABCDEF\AB1010\datei.txt' ); print $filename;
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-04-14T13:33:02 pqnicht also unter unix mit windows-pfadangaben.
2010-04-14T13:40:28 biancaJa, mag sein.
QuoteUnd da die genannten Module nicht im Core zu sein scheinen wäre mir für eine solche Trivialität ein Modul zuviel. Geschmackssache.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-04-14T13:43:39 reneeKann vorkommen, wenn Du ein Datei-Uploadfeld in einem HTML-Formular hast und jemand mit dem IE Datei hochlädt. Der IE liefert da immer den ganzen Pfad (war zumindest bei älteren IEs so). Und das Skript liegt ja dann häufig auf einem Unix/Linux-Server.
2010-04-14T14:07:13 reneeJa, geht auch mit Regex. Meine Antwort war auf Deine Frage, wo denn Windows-Pfade unter Unix vorkommen können.
2010-04-14T13:24:26 PETER_PAN2009Er springt aber an den zweiten Backslash von hinten, was mache ich falsch?
1 2 3 4 5
use strict; use warnings; my $meinpfad = 'ABCDEF\AB1010\datei.txt'; my ($dateiname) = ( split(/\\/,$meinpfad) )[-1]; print "Dateiname von $meinpfad ist $dateiname", "\n";
2010-04-14T15:03:28 GwenDragonWarum verwendet niemand ein split, ein Regex ist da eigentlich nicht nötig?
1 2 3 4 5 6 7 8 9
#!/usr/bin/perl -w use strict; use warnings; foreach ('nur_datei_ohne_pfad.pdf','\\windows_pfad\\datei.pdf','linux_pfad/datei.pdf','') { print "\n\nBehandle $_ \n"; print "rindex: " . (substr $_,rindex($_,'\\')+1) . "\n"; (my $regex = $_) =~ s/^.*[\\\/]//g; print "regex : $regex\n"; }
2010-04-14T15:56:40 biancaBekäme man das auch so erweitert, dass auch Linux-Pfade erkannt werden?
Laut Doku gibt man bei rindex nur einen String zur Suche an, oder?
my $filename = (split /[\\\/]/, $path)[-1];
2010-04-14T17:59:21 esskarobwohl unter linux ein \ ein gültiger teil eines dateinamens ist.