Thread Datei speichern mit vorgegebener Dateiendung (11 answers)
Opened by maryl at 2010-08-12 09:20

topeg
 2010-08-13 00:04
#140607 #140607
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Was ist daran nicht zu verstehen?

"rindex" fängt von hinten an und arbeitet sich nach vorne durch. Es findet so das letzte auftreten eines Strings in einem Anderen. Gibt man eine Position an fängt er nicht am Ende das Strings an sondern an dieser Position und gibt da die letzte Position des Strings in einem anderen vor der gegebenen Position.

So ist "rindex" schon korrekt, aber man sollte mit der Angabe der Startposition aufpassen.

Im Gegensatz zu einem regulären Ausdruck ist "index" und "rindex" um einiges schneller, denn das Starten der RegexpEngine und das Parsen des regulären Ausdrucks dauert auch etwas.

Will man völlig korrekt prüfen ob eine Endung schon gesetzt ist kann man es so machen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $endung='.txt';
my $fname="/das/ist/eine/datei.txt";

my $e_length=length($endung);

# substring
print "SUBSTR OK\n" if(substr($fname,-$e_length,$e_length) eq $endung);

# rindex
print "RINDEX OK\n" if(rindex($fname,$endung)==length($fname)-$e_length);

# index
print "INDEX  OK\n" if(index($fname,$endung,length($fname)-$e_length)==length($fname)-$e_length);

#regexp
print "REGEXP OK\n" if($fname=~/\Q$endung\E$/);


Natürlich ist es mit einem regulären Ausdruck am kürzesten und am lesbarsten (sofern man RegExps versteht).

View full thread Datei speichern mit vorgegebener Dateiendung