[Perl] Script zum Einlesen einer Datei


mkoeni1

Erfahrenes Mitglied
Hallo Leute,

ich habe eine Datei (*.txt), in der Files aus unterschiedlichen Speicherorten stehen:
Z:/tmp/testfile
Z:/tmp/UebungsZylinderkopf.tar
//sambasrv2/data/desktop/testfile
C:/bla/bli/

jetzt habe ich ein Script mit dem ich nur den Dateinamen, sprich nach dem letzten "/" speichern möchte. Also im 1. Filename nur "testfile.

mein Script sieht bis jetzt so aus:
PHP:
...
my @filename_arrayfile = $job->readfile( $file );
#       print $filename_arrayfile[0]." - erster string";
 
# handle this with while loop - next step - ok
        my $n = 0;
        # do some initial
        my @path;
        my @pathfirst;
        my $first_path_last_value;
 
        while ($filename_arrayfile[$n]){
#               print "@filename_arrayfile[$n]\n";
 
                $path[$n] = $filename_arrayfile[$n];
                # Ausgabe ok
                @pathfirst = split("/", $path[$n]);
                $first_path_last_value = $pathfirst[length(@pathfirst)+1];
                print $first_path_last_value;
                $n++;   
        }
leider fällt er bei der Auswertung des Dateinamens mit den zwei vorangestellten "//" (Netzlaufwerk) hin.
Die Ausgabe sieht dann so aus:

Code:
testfileUebungsZylinderkopf.tarsambasrv2bli
Hat jemand eine Idee, wie dies anderst zu lösen ist? Ich arbeite mit Perl v5.8.2 und aix.


Gruß mkoeni1
 

MArc

Erfahrenes Mitglied
Hi,

schau mal hier, so funktioniert es:
Perl:
open(fh, '<', 'test.txt');
while(<fh>){
  $_ =~ s/.*\/(.*)$/$1/g;
  print $_;
}
Edit: Ok, Backslash geht nun - wusste garnicht,dass
es hier auch PERL-BBcodes gibt :)

Grüße,
MArc
 
Zuletzt bearbeitet:

renee

Erfahrenes Mitglied
Warum nicht mit File::Basename

Code:
#!/usr/bin/perl

use strict;
use warnings;
use File::Basename;

my @files = (
    'Z:/tmp/testfile',
    'Z:/tmp/UebungsZylinderkopf.tar',
    '//sambasrv2/data/desktop/testfile',
    'C:/bla/bli/',
);

for my $file ( @files ){
    print basename( $file ),"\n";
}
 

Neue Beiträge