string kuerzen
-
hallo,
wie kann ich einen string um bestimmte zeichen kuerzen? ich lese mehrere *.txt datein ein und moechte jetzt die txt endung weghaben...
jemand eine loesung?
-
Sicher, am einfachsten s/\.txt$//i machen.
-
Du neigst dazu, mit Spatzen auf Kanonen zu schießen (oder war's andersrum?
). Zumindest in PHP sind andere Lösungen performanter ...
-
use Benchmark qw(timethese cmpthese); cmpthese timethese(-20, {regex => ®ex, func1 => &func1}); sub regex { $test = 'datei.txt'; $test =~ s/\.txt$//i; } sub func1 { $test = 'datei.txt'; $test = substr($test, 0, -4); }
Ergebnis:
Benchmark: running func1, regex for at least 20 CPU seconds... func1: 19 wallclock secs (20.02 usr + -0.00 sys = 20.01 CPU) @ 45947119.26/s (n=919631592) regex: 23 wallclock secs (22.72 usr + -0.02 sys = 22.70 CPU) @ 42714562.92/s (n=969748722) Rate regex func1 regex 42714563/s -- -7% func1 45947119/s 8% --
Es existiert also durchaus ein Geschwindigkeitsunterschied, aber der hält sich in Grenzen. Wie man obiger Ausgabe entnehmen kann, benötigen die Funktionen auf meinem zwei Jahre alten Laptop:
- 0,000000023s mit dem regulären Ausdruck (regex) und
- 0,000000022s mit der Stringfunktion (func1)Der Vorteil beim regulären Ausdruck ist aber, dass man nicht blind herumschnippselt. Dafür nehme ich gerne 0,000000001s zusätzlich in Kauf
-
Ich warte übrigens auf die PHP-Variante
-
preg_replace mit
'/^(.*?)\.txt$/'
'$1'
-
Naja, ich dachte jetzt eher an einen Benchmark nach obigem Muster.
Hab zwar selbst kurz einen Blick auf das Pear-Paket "Benchmark" geworfen, wurde dann jedoch wieder gekonnt von PHP daran erinnert, warum ich es bäh finde und hab mich deswegen entschloßen, doch lieber die PHP-Fans des Forums das machen zu lassen. Denn denen gefällt die Sprache ja offenbar
-
str_ireplace('.txt', '', $MyString);
oder
str_replace('.txt', '', $MyString);
-
Ich merk schon, ihr seid von PHPs Benchmarkqualitäten auch nicht begeistert
-
Reyx schrieb:
str_ireplace('.txt', '', $MyString);
oder
str_replace('.txt', '', $MyString);Tolle Lösung und was ist jetzt, wenn ich eine Datei namens "txt_datei1.txt" habe?
Dann doch lieber str, 0, -3);
-
Sry, gehen wir davon aus, ich hätte eine Datei namens ".txt_datei1.hidden.txt".
Könnte auf einer Linux Maschine ja durchaus vorkommen, wenn es sich jetzt um ne Passwort-Datei handelt oder sowas...