nur noch der Dateiname
Peter
- perl
0 Cheatah0 Norbert Kölln0 Klaus Mock
Hallo,
kann mir jemand helfen?
Die Programmzeile lautet:
@fields[4] = "pic";
Das Ergebnis sieht dann so aus. C:/0001stoffgalerien/sweatuni/Thumbs/tn_456067.jpg
Es sollte aber nur noch der reine Bildname erscheinen. Wie kann ich den Bildnamen abtrennen?
Grüße, Peter
Hi,
@fields[4] = "pic";
warum behauptest Du, ein Array zuzuweisen, übergibst dann aber einen Skalar?
Das Ergebnis sieht dann so aus. C:/0001stoffgalerien/sweatuni/Thumbs/tn_456067.jpg
Erstaunlich. Das lässt sich aus dem Code jedenfalls nicht ersehen.
Es sollte aber nur noch der reine Bildname erscheinen. Wie kann ich den Bildnamen abtrennen?
Zunächst einmal musst Du wissen, welches das Trennzeichen ist - auf dem Macintosh beispielsweise der Doppelpunkt, unter Unix der Slash, bei Windows der Backslash. Dann liest Du
perldoc -f split
Cheatah
Moin, moin!
Die Frage habe ich nicht ganz verstanden, aber ich hoffe, die Antwort paßt.
Wenn Du eine Variable mit einem Dateinamen inklusive Pfad hast, z. B. durch die Zuweisung
$datei="C:/0001stoffgalerien/sweatuni/Thumbs/tn_456067.jpg";
dann kommst Du an den reinen Dateinamen mit
$datei=~s/.*/(.*)/$1/;
Erläuterungen dazu findest Du in der Doku zu regulären Ausdrücken:
http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm
Alles klar?
Norbert
Hallo Norbert,
$datei="C:/0001stoffgalerien/sweatuni/Thumbs/tn_456067.jpg";
dann kommst Du an den reinen Dateinamen mit
$datei=~s/.*/(.*)/$1/;
Das war jetzt die langsame Methode. Die schnelle waere:
$date =~ s![^/]+!!;
Bitte, Leute, achtet auf die RegExe, die ihr formuliert! Das
ist *kein* vernachlaessigbarer Aufwand:
use strict;
use Benchmark;
my $filename = 'C:/0001stoffgalerien/sweatuni/Thumbs/tn_456067.jpg';
timethese(1000000, {
backreference => sub {
my $fname = $filename;
$fname =~ s/.*/(.*)/$1/;
},
small => sub {
my $fname = $filename;
$fname =~ s![^/]+!!;
}
}
);
Benchmark: timing 1000000 iterations of backreference, small...
backreference: 15 wallclock secs (14.41 usr + 0.02 sys = 14.43 CPU)
small: 10 wallclock secs ( 4.49 usr + 0.01 sys = 4.50 CPU)
Ein schneller RegEx kann ganz erheblich zur Erhoehung der
Laufzeit beitragen.
Gruesse,
CK
Hallo,
$datei=~s/.*/(.*)/$1/;
Das war jetzt die langsame Methode. Die schnelle waere:
$date =~ s![^/]+!!;
Mit dem Unterschied, daß erstere das gewünschet ergebnis bringt, zweitere aber nicht;-)
Ein schneller RegEx kann ganz erheblich zur Erhoehung der
Laufzeit beitragen.
Lass es einmal so sagen. Je eher zu erwarten ist, daß ein Code oft durchlaufen wird, desto eher sollte man sich darum kümmern, wie effizient dieses Code wirklich arbeitet. Code, der garantiert nur einmal durchlaufen wird, verdient diese Aufmerksamkeit eigentlich nicht wirklich.
Nur sollte nach dem Tuning alles auch wieder so funktionieren, wie vorher;-)
Grüße
Klaus
Hallo,
Wie kann ich den Bildnamen abtrennen?
Du kannst Dir einma das Modul File::Basename zu Gemüte führen.
Grüße
Klaus