Peter: nur noch der Dateiname

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

  1. 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

    --
    X-Will-Answer-Email: No
  2. 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

    1. 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

      1. 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

  3. Hallo,

    Wie kann ich den Bildnamen abtrennen?

    Du kannst Dir einma das Modul File::Basename zu Gemüte führen.

    Grüße
      Klaus