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 => &regex, 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 string=substr(string = substr(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...


Anmelden zum Antworten