Sibold: Dokumentname extrahieren

Hallo, wie erhalte ich auf einer Webseite xyz.......de/......./..../wandern.html in php den Wert wandern? Statt html könnte auch php o.ä. stehen. Ich habe den Verdacht, dass ich die Variable SCRIPT_NAME verwenden muss, also $SName = $_SERVER['SCRIPT_NAME']; Und dann wohl mit einem regulären Ausdruck. Da ich das Ergebnis möglichst schnell brauche, bitte ich Euch mir den Weg zu zeigen. In reguläre Ausdrücke will/muss ich mich später einarbeiten.

  1. Hallo

    Schau dich mal in den Funktionen für das Dateisystem um. Die Funktion basename scheint ein geeigneter Kandidat zu sein.

    Tschö, Auge

    --
    Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
    Toller Dampf voraus von Terry Pratchett
    1. Hallo auge, basename liefert im obigen Beispiel "wandern.html". Wie kann ich daraus "wandern" extrahieren ohne mich sofort in reg. Ausdrücke einarbeiten zu müssen (s.o.)?

      1. Hallo

        basename liefert im obigen Beispiel "wandern.html". Wie kann ich daraus "wandern" extrahieren ohne mich sofort in reg. Ausdrücke einarbeiten zu müssen (s.o.)?

        Die Funktion nimmt, wie auf der verlinkten Seite der Doku zu lesen ist, einen zweiten, optionalen Parameter entgegen, der, wenn angegeben, einen abzuschneidenden Suffix enthält. Wenn du die Endung der zu ermittelnden Dateinamen kennst, kannst du sie dort angeben. Weiterhin ist auf der Seite die Funktion pathinfo verlinkt, die Infos zum Pfad in einem Array oder als Strings ausgibt.

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett
        1. Nur, wenn man die Extension kennt. Sibold kennt sie aber nicht.

          Guck hier.

          Rolf

          1. Hallo

            Nur, wenn man die Extension kennt.

            Wie ich es selbst in dem von dir beantworteten aber nicht zitierten Posting schrieb.

            „Wenn du die Endung der zu ermittelnden Dateinamen kennst, kannst du sie dort angeben.“

            Sibold kennt sie aber nicht.

            Ja, allerdings.

            Guck hier.

            Die von martl, TS und mir genannte Funktion pathinfo macht das sogar ohne Regex- oder Stringfunktionen.

            $name = pathname("/pfad/zur/datei/wandern.php", PATHINFO_FILENAME);
            

            Das einzige, was damit nicht erkannt wird, sind Punkte im Dateinamen, die nicht den Namen von der Endung trennen. Da müsste man doch wieder Regex- oder Stringfunktionen bemühen.

            Tschö, Auge

            --
            Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
            Toller Dampf voraus von Terry Pratchett
            1. Ja, wie das so ist, wenn man etwas ausprobiert bevor man postet. Dann hat ggf. schon jemand parallel was anderes gepostet. Diesmal den Hinweis auf pathinfo (nicht pathname ;-) ).

              Immerhin bleibt bei mir noch als sinnvoller Rest der Hinweis übrig, wie man vorgeht, wenn man alle Extensions entfernen will.

              Rolf

              1. Hallo

                Immerhin bleibt … der Hinweis übrig, wie man vorgeht, wenn man alle Extensions entfernen will.

                Kommt darauf an, was du als Extension definierst. Wie im Nachbarzweig diskutiert wird, gibt es sowohl Dateien mit mehrteiliger Extension (*.tar.gz) als auch Dateinamen, die aus mehreren Teilen, die sehr wohl mit Punkten verbunden sind, aber keine Endungen darstellen. Die möchte man schon unterschiedlich behandeln.

                Welche der diskutierten Fälle Sibold letztlich für die konkrete Aufgabe berücksichtigen muss, kann nur er selbst wissen. Wenn es in den Dateinamen nur einen Punkt vor der Endung gibt, entferne er alles nach diesem einen Punkt. Gibt es Punkte im eigentlichen Namen der Datei und gehören die auch in die Ausgabe, entferne er alles nach dem letzten Punkt (was mMn grundsätzlich robuster ist). Wenn es doch komplexer ist, frage er nach ound/oder überdenke er das System.

                Tschö, Auge

                --
                Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
                Toller Dampf voraus von Terry Pratchett
    2. Hallo Auge,

      von dieser Seite weiter "Siehe auch" pathinfo() und dort Beispiel #1. ['basename'] bzw. ['filename'] sollten passen.

      Grüße, Martl

    3. SCRIPT_NAME liefert Dir den Namen des gerade ausgeführten PHP Scripts, d.h. wenn Dein Anwender die Seite http://example.org/foo/wandern.php abruft (und keiner die URL rewrited), findest Du in SCRIPT_NAME den Wert '/foo/wandern.php'. Freundlicherweise sind Query-Parameter oder ein PATH_INFO bereits entfernt. Also: Gut gewählt :)

      basename('/foo/wandern.php') liefert Dir 'wandern.php'. Du wolltest aber, wenn ich das richtig verstanden habe, 'wandern' haben.

      Nun kommst Du in Entscheidungszwang: Was ist mit "wandern.map.php"? Willst Du "wandern" oder "wandern.map" haben? Abhängig davon musst Du nun den ersten oder letzten Punkt im basename-Ergebnis suchen. Das geht mit einer Regex ganz easy - aber das willst Du ja nicht 😉. Mit strpos bzw. strrpos ist es aber auch nicht schwer.

      $bsnam = basename("/foo/wandern.map.html");
      
      // entweder
      $first = strpos($bsnam, ".");
      $pureName = substr($bsnam, 0, $first);
      
      // oder
      $last = strrpos($bsnam, ".");
      $noExt = substr($bsnam, 0, $last);
      

      Rolf

  2. Hello,

    wie erhalte ich auf einer Webseite xyz.......de/......./..../wandern.html in php den Wert wandern?

    Mit der Funktion pathinfo() kannst Du den ganzen Pfad zerlegen.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
  3. Hallo,

    Lass dir doch einfach die Informationen zum Pfad geben, da gibt's eine Funktion für, die das gewünschte liefert.

    Gruß
    Kalk

  4. Hallo,

    ich würde es so machen:

    <?php
    $str = 'xyz.......de/......./..../wandern.html';
    $res = strstr(basename($str),'.',true);
    
    echo $res;
    ?>
    

    Also erst den Pfad begrenzen mit basename und dann alles vor dem Punkt(strstr) ausgeben.

    Gruss
    Henry

    1. Hello,

      ich würde es so machen:

      <?php
      $str = 'xyz.......de/......./..../wandern.html';
      $res = strstr(basename($str),'.',true);
      
      echo $res;
      ?>
      

      Also erst den Pfad begrenzen mit basename und dann alles vor dem Punkt(strstr) ausgeben.

      Siehe strstr():

      vor welchem Punkt? Dem ersten, dem zweiten, ..., dem letzten Punkt?
      Dem letzten(?): dann ist es so verkehrt, wie Du es zeigst.

      Dass im Beispiel nur ein Punkt im gesamten Dateinamen vorhanden ist, darf man nicht als statisch gegeben annehmen. Das führt dann in der Praxis zu den beliebten Lücken...

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es
      Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
      1. Hallo Tom,

        vor welchem Punkt? Dem ersten, dem zweiten, ..., dem letzten Punkt?
        Dem letzten(?): dann ist es so verkehrt, wie Du es zeigst.

        Dass im Beispiel nur ein Punkt im gesamten Dateinamen vorhanden ist, darf man nicht als statisch gegeben annehmen. Das führt dann in der Praxis zu den beliebten Lücken...

        Habe ich einen Denkfehler? basename zerlegt den(egal welchen) Pfad bis auf "Dateiname.ext", folglich bleibt nur ein Punkt und nach strstr fällt dann auch ".ext" weg. Wo ist dann der Haken?

        Gruss
        Henry

        1. Hello,

          vor welchem Punkt? Dem ersten, dem zweiten, ..., dem letzten Punkt?
          Dem letzten(?): dann ist es so verkehrt, wie Du es zeigst.

          Dass im Beispiel nur ein Punkt im gesamten Dateinamen vorhanden ist, darf man nicht als statisch gegeben annehmen. Das führt dann in der Praxis zu den beliebten Lücken...

          Habe ich einen Denkfehler?

          vielleicht?

          basename zerlegt den(egal welchen) Pfad bis auf "Dateiname.ext", folglich bleibt nur ein Punkt und nach strstr fällt dann auch ".ext" weg. Wo ist dann der Haken?

          Damit wären es schon zwei Denkfehler.

          Es ist weder bekannt, wie der Pfad lautet, noch wie der gesuchte Dateiname oder seine Extension(s) lauten.
          Wenn dann da also pfad\zur\datei\name.vorname.datum.extension steht, was ist dann der Dateinaame und was macht dann dein Lösungsvorschlag daraus?

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
          1. Hallo Tom,

            Es ist weder bekannt, wie der Pfad lautet, noch wie der gesuchte Dateiname oder seine Extension(s) lauten.
            Wenn dann da also pfad\zur\datei\name.vorname.datum.extension steht, was ist dann der Dateinaame und was macht dann dein Lösungsvorschlag daraus?

            ach so, ok verstehe

            Würde jetzt am liebsten sagen, wer solche Dateinamen nutzt ist selbst schuld, ok ich sage es 😉
            Aber im Ernst, für den OP, der anscheinend anhand der Dateinamen eine Auflistung erreichen will und dementsprechend klare Namen vergeben wird, wird's wohl passen.

            Für andere, die tatsächlich solche Namen vergeben könnten, ist dein Einwand natürlich völlig richtig. Da hilft dann allerdings nach dem letzten Punkt zu suchen:

            Auf die Schnelle(geht wahrscheinlich auch noch besser)
            $res = substr(strrev(strstr(strrev(basename($str)),'.')),0,-1);

            Gruss
            Henry

            1. Hallo Henry,

              Wenn dann da also pfad\zur\datei\name.vorname.datum.extension steht, was ist dann der Dateinaame und was macht dann dein Lösungsvorschlag daraus?

              Würde jetzt am liebsten sagen, wer solche Dateinamen nutzt ist selbst schuld, ok ich sage es 😉

              Unter unixoiden Betriebssystemen sind solche „Doppelendungen“ gar nicht so selten: .tar.gz für gepackte TARs oder .xcf.bz2 für gepackte Gimp-Dateien. Ich kann diese Dateien mit einem Entpackpogramm öffnen, aber auch direkt mit der Zielanwendung.

              Viele Grüße
              Robert

              1. @@Robert B.

                Wenn dann da also pfad\zur\datei\name.vorname.datum.extension steht, was ist dann der Dateinaame und was macht dann dein Lösungsvorschlag daraus?

                Würde jetzt am liebsten sagen, wer solche Dateinamen nutzt ist selbst schuld, ok ich sage es 😉

                Unter unixoiden Betriebssystemen sind solche „Doppelendungen“ gar nicht so selten

                Bei mehrsprachigen Websites auch nicht: index.de.html, index.en.html, …

                Wer das so einsetzt, ist nicht „selbst schuld“, sondern macht automatische Sprachvereinbarung einfach.

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
          2. pfad\zur\datei\name.vorname.datum.extension

            <?php
            if ( isset( $_SERVER['HTTP_HOST'] ) ) {
                header ('Content-Type:text/html; charset:utf-8');
            }
            
            $str='pfad/zur/datei/name.vorname.datum.extension';
            echo basename( $str ) . "\n";
            print_r ( explode( '.', basename( $str ) ) );
            print_r ( array_slice( explode( '.', basename( $str ) ), 0, -1 ) );
            echo implode( '.', array_slice( explode( '.', basename( $str ) ), 0, -1 ) );
            
            if (! isset( $_SERVER['HTTP_HOST'] ) ) {
                echo "\n";
            }
            

            Alles andere sind die Definitionsfragen. Definitionsfragen löst kein Programm.

            Einzeln:

            <?php
            if ( isset( $_SERVER['HTTP_HOST'] ) ) {
                header ('Content-Type:text/html; charset:utf-8');
            }
            
            $str='pfad/zur/datei/name.vorname.datum.extension';
            var_dump ( basename( $str ) );
            var_dump  ( explode( '.', basename( $str ) ) );
            var_dump  ( array_slice( explode( '.', basename( $str ) ), 0, -1 ) );
            var_dump  ( implode( '.', array_slice( explode( '.', basename( $str ) ), 0, -1 ) ) );
            
            1. Hello,

              
              > <?php
              >     header ('Content-Type:text/plain; charset:utf-8');
              > 
              > //$str='pfad/zur/datei/name.vorname.datum.extension';
              > $str='pfad/zur/datei/name';
              > var_dump ( basename( $str ) );
              > var_dump  ( explode( '.', basename( $str ) ) );
              > var_dump  ( array_slice( explode( '.', basename( $str ) ), 0, -1 ) );
              > var_dump  ( implode( '.', array_slice( explode( '.', basename( $str ) ), 0, -1 ) ) );
              
              

              ergibt:

              string(4) "name"
              array(1) {
                [0]=>
                string(4) "name"
              }
              array(0) {
              }
              string(0) ""
              

              was falsch ist.
              Der von mir bemängelten fehlenden Rücksichtnahme auf 0 bis n Punkte im Dateinamen (incl. Extension) wurde hier also auch keine Rechnung getragen.

              Benutzt man die Funktion pathinfo(), hat man das Problem nicht:

              array(3) {
                ["dirname"]=>
                string(14) "pfad/zur/datei"
                ["basename"]=>
                string(4) "name"
                ["filename"]=>
                string(4) "name"
              }
              

              Man muss nur anschließend mittles isset() auch prüfen, ob das erwünschte Arrayelement auch geliefert wurde. Das ist aber meistens nur interessant für scheme.

              Außerdem stellen derartig geschachtelte Funktionsaufrufe, wie sie von Dir gezeigt wurden, meistens ein Sicherheitsrisiko dar, da keine Überprüfung der erwünschten Rückgabewerte stattfindet.

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es
              Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
              1. //$str='pfad/zur/datei/name.vorname.datum.extension';
                $str='pfad/zur/datei/name';
                

                Mein Code funktioniert, denn er entfernt die Dateiendung. Das es Dateien auch ohne Endung geben kann war aber nicht definiert. Ich habe nicht grundlos geschrieben:

                Alles andere sind die Definitionsfragen. Definitionsfragen löst kein Programm.

                Zur Erinnerung: Die Forderung lautete:

                Hallo, wie erhalte ich auf einer Webseite xyz.......de/......./..../wandern.html in php den Wert wandern?

                1. Hello,

                  //$str='pfad/zur/datei/name.vorname.datum.extension';
                  $str='pfad/zur/datei/name';
                  

                  Mein Code funktioniert, denn er entfernt die Dateiendung. Das es Dateien auch ohne Endung geben kann war aber nicht definiert. Ich habe nicht grundlos geschrieben:

                  "funktioniert" ist hier wohl auch eher nur noch Zufall :-P

                  Alles andere sind die Definitionsfragen. Definitionsfragen löst kein Programm.

                  Ich muss Dir da widersprechen!

                  Wie soll man denn auf eine Ressource zugreifen können, wenn vom Namen derselben nichts mehr übrig bleibt, weil deine geschachtelten Funktionen den beseitigt haben? Im Webumfeld würde dann höchstwahrscheinlich alternativ auf den Directory-Index verzweigt werden, was aber ohne zusätzliche programmtechnische Berücksichtigung zu merkwürdigen Seiteneffekten führen kann.

                  Die Extensions von Dateien sind konventionell so anzuordnen, dass man sie von rechts nach links abarbeiten könnte, falls dies gewünscht ist. Eine name.tar.gz-Datei würde also zuerst entpackt - es entsteht ein TAR-Ball - und dann kann der TAR-Ball plaziert und entfaltet werden.

                  Ich vertrete die Ansicht, wenn man sich beim Programmieren etwas nachdenkt udn sich Mühe gibt, die Grenzen des erstellten Konstruktes abzuklopfen, und vor allem sich eine explizite Schreibweise hält, bei der mögliche Erfolgs-/Fehlerkontrollen jedes einzelnen Statements auch wahrgenommen werden, dann hätten wir viel weniger WannaCry(pt)s und sonstige Lücken zu beklagen!

                  Man sollte sich nicht darauf hinausreden, dass das alles nur Definitionssache sei!

                  ##Die Verwendung von pathinfo()
                  ist hier mMn eindeutig der sauberere Weg zum Ziel. Deine Matrjoschka-Programmierung in einer Zeile sorgt jedenfalls wesentlich eher für (unangenehme) Überraschungen, als die Verwendung einer Funktion, die lieber zwei Zeilen benötigt (anschließendes isset() ist angeraten), aber dafür abgesicherte Ergebnisse liefert.

                  Liebe Grüße
                  Tom S.

                  --
                  Es gibt nichts Gutes, außer man tut es
                  Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
                  1. "funktioniert" ist hier wohl auch eher nur noch Zufall 😝

                    Nein. Der Code wurde streng nach der Vorgabe entwickelt und getestet.

                    Ich muss Dir da widersprechen! Wie soll man denn auf eine Ressource zugreifen können, wenn vom Namen derselben nichts mehr übrig bleibt,

                    Wenn der Name einer Ressource vor dem Zugriff durch ein Programm bearbeitet werden soll, dann muss irgendwo definiert sein, was drin stehen darf und wie der aufgebaut ist.

                    1. @@Regina Schaukrug

                      "funktioniert" ist hier wohl auch eher nur noch Zufall 😝 Nein. Der Code wurde streng nach der Vorgabe entwickelt und getestet.

                      „Streng nach Vorgabe“ ist selten etwas, was man als Programmierer tun sollte (insbesondere, wenn die Vorgabe von einem Nicht-Programmierer stammt).

                      Besser ist es, mitzudenken und Code robust zu entwickeln, so dass er die Vorgabe erfüllt – und auch geringfügige Abweichungen davon gleich mit.

                      LLAP 🖖

                      --
                      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                      1. Besser ist es, mitzudenken und Code robust zu entwickeln, so dass er die Vorgabe erfüllt – und auch geringfügige Abweichungen davon gleich mit.

                        Der Code ist "robust". Denn er stürzt, falls der Ressourcenname der vom TO gezeigten Form nicht genügt, nicht etwa ab, sondern liefert (TS hats gezeigt) schlicht einen leeren String.

                        Alles weitere verlangt nach weiteren Spezifikationen, siehe .tar.gz, e.t.c. Auch die Erwartungen in "robusten code" können nur endlich sein.

                        1. @@Regina Schaukrug

                          Besser ist es, mitzudenken und Code robust zu entwickeln, so dass er die Vorgabe erfüllt – und auch geringfügige Abweichungen davon gleich mit.

                          Der Code ist "robust". Denn er stürzt, falls der Ressourcenname der vom TO gezeigten Form nicht genügt, nicht etwa ab, sondern liefert (TS hats gezeigt) schlicht einen leeren String.

                          Mit „robust“ meine ich: liefert das erwartete Ergebnis.

                          LLAP 🖖

                          --
                          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                          1. @@Regina Schaukrug

                            Besser ist es, mitzudenken und Code robust zu entwickeln, so dass er die Vorgabe erfüllt – und auch geringfügige Abweichungen davon gleich mit.

                            Der Code ist "robust". Denn er stürzt, falls der Ressourcenname der vom TO gezeigten Form nicht genügt, nicht etwa ab, sondern liefert (TS hats gezeigt) schlicht einen leeren String.

                            Mit „robust“ meine ich: liefert das erwartete Ergebnis.

                            Klar. Nur muss erst mal definiert sein, was wann erwartet wird. Die bisherige Definition ist: Eingangwert ist String mit dem Namen einer Datei, mit Pfad und genau einer Endung. Geliefert werden soll der Name der Datei ohne den Pfad und ohne die Endung.

                            Ohne irgendwelche Definitionen können wir eine erdengroße, auf Quantentechnik laufende KI-Maschine hinstellen, die superrobust ist, und 237*10^15 Jahre nach der Eingabe völlig zufälliger oder absurder Werte ein Ergebnis liefert ohne dass noch jemand den Input kennt.

                            Mit Definion hat man nach Bruchteilen von Millisekunden entweder das Ergebnis oder einen Hinweis darauf, dass der Input "Garbage" war. In Falle des gezeigten Codes besteht der Hinweis eben aus einen leeren String. Das ist nicht der einzige Code, der so funktioniert, auch viele der angepriesenen, gut getesteten Funktionen funktionieren genau so.

                            1. Hello,

                              Besser ist es, mitzudenken und Code robust zu entwickeln, so dass er die Vorgabe erfüllt – und auch geringfügige Abweichungen davon gleich mit.

                              Der Code ist "robust". Denn er stürzt, falls der Ressourcenname der vom TO gezeigten Form nicht genügt, nicht etwa ab, sondern liefert (TS hats gezeigt) schlicht einen leeren String.

                              Ich habe gezeigt, dass ein falsches Ergebnis geliefert wird!

                              Mit „robust“ meine ich: liefert das erwartete Ergebnis.

                              Klar. Nur muss erst mal definiert sein, was wann erwartet wird. Die bisherige Definition ist: Eingangwert ist String mit dem Namen einer Datei mit Pfad und genau einer einer Endung. Geliefert werden soll der Name der Datei ohne den Pfad und ohne die Endung.

                              Ohne irgendwelche Definitionen können wir eine erdengroße, auf Quantentechnik laufende KI-Maschine hinstellen, die superrobust ist, und 237*10^15 Jahre nach der Eingabe völlig zufällig Werte ein Ergebnis liefert ohne dass noch jemand den Input kennt.

                              Mit Definion hat man nach Bruchteilen von Millisekunden entweder das Ergebnis oder einen Hinweis darauf, dass der Input "Garbage" war. In Falle des gezeigten Codes eben einen leeren String.

                              Wenn kein Name ermittelt werden konnte, würde jeder PHP-Programmierer, der bei Verstand ist, den Rückgabewert false erwarten und keinen Leerstring. Das sind zwei verschiedene Dinge!

                              Liebe Grüße
                              Tom S.

                              --
                              Es gibt nichts Gutes, außer man tut es
                              Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
                              1. Ich habe gezeigt, dass ein falsches Ergebnis geliefert wird!

                                Das hast Du gerade nicht. Du hast nur gezeigt, was geliefert wird, wenn der Input nicht den Erwartungen entspricht.

                                Wenn kein Name ermittelt werden konnte, würde jeder PHP-Programmierer, der bei Verstand ist, den Rückgabewert false erwarten und keinen Leerstring. Das sind zwei verschiedene Dinge!

                                Du kannst das gern um die eine Zeile herum bauen und eine Funktion daraus machen. Ich habe aber keine Funktion vorgestellt.

                            2. @@Regina Schaukrug

                              Mit „robust“ meine ich: liefert das erwartete Ergebnis.

                              Klar. Nur muss erst mal definiert sein, was wann erwartet wird. Die bisherige Definition ist: Eingangwert ist String mit dem Namen einer Datei mit Pfad und genau einer einer Endung.

                              Das ist vielleicht das, was ein Nicht-Programmierer sagt. Aber nicht das, was er meint. Es gehört zum Job des Programmierers, das zu erkennen. In dem Fall zu erkennen, dass eben nicht genau eine Endung gemeint ist, sondern auch keine. Oder auch mehrere.

                              Geliefert werden soll der Name der Datei ohne den Pfad und ohne die Endung.

                              Ja, und das auch bei keiner Endung.

                              Bei mehreren Endungen besteht Gesprächsbedarf. Kann ja auch sein, dass Punkte im Dateinamen verwendet werden, die keine Endungen abtrennen.

                              LLAP 🖖

                              --
                              “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                              1. Das ist vielleicht das, was ein Nicht-Programmierer sagt. Aber nicht das, was er meint.

                                Was er meint kann nicht wissen. Ich kann ihn auch nicht direkt fragen, das wäre das, was ich tun würde wenn der TO ansprechbar wäre.

                                Ihr streitet mit mir über ungelegte Eier. Ich mag ja auch oft genug spekulieren was der TO wohl wirklich wollte, aber wie das bei Spekulationen eben so ist, glaube ich ganz fest daran, dass der TO tatsächlich etwas wie "Eingangwert ist String mit dem Namen einer Datei mit Pfad und genau einer einer Endung. Geliefert werden soll der Name der Datei ohne den Pfad und ohne die Endung" meint. Denn das ist genau das, was er gezeigt hat. Alles andere ergibt in dem von mir vermuteten Kontext einfach keinen Sinn.

                                1. Hello,

                                  Das ist vielleicht das, was ein Nicht-Programmierer sagt. Aber nicht das, was er meint.

                                  Das ist dann erst einmal unerheblich.

                                  Ihr streitet mit mir über ungelegte Eier.

                                  Schon alleine die Tatsache, dass drei andere Programmierer einheitlich ein eigenständiges Weiterdenken bei der Auslegung der Aufgabe propagieren und dabei sogar noch auf eine gleiche Auslegung kommen, sollte Dir doch zu denken geben.

                                  Warum kannst Du nicht einfach zugeben, dass Du nicht weit genug gedacht hast?

                                  Liebe Grüße
                                  Tom S.

                                  --
                                  Es gibt nichts Gutes, außer man tut es
                                  Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
                                  1. Schon alleine die Tatsache, dass drei andere Programmierer einheitlich ein eigenständiges Weiterdenken bei der Auslegung der Aufgabe propagieren und dabei sogar noch auf eine gleiche Auslegung kommen, sollte Dir doch zu denken geben.

                                    Wenn nur 3 Personen eine andere Auffassung über einen Sachverhalt haben, dann bedeutet das nicht, dass ich nicht recht habe. Einen Herrn Darwin haben weit mehr, zu der Zeit noch hoch angesehene Personen übel beschimpft. Und doch hatte er recht.

                                    Mir gibt aber zu denken, dass irgendwer offensichtlich ein Problem damit hat, dass eine andere Person beim Spekulieren über die Aufgabe zu einer anderen Auffassung als er selbst kommt. Dabei ist die Spekulation des Bekrittelten bei klarer Betrachtung nicht weniger zulässig ist als die eigene. Und dass dann diese Person oder eine andere dann auch noch unwahr behauptet, dass das Ergebnis von dessen Bemühungen falsch sei.

                                    Warum kannst Du nicht einfach zugeben, dass Du nicht weit genug gedacht hast?

                                    Weil ich fest davon überzeugt bin, dass es nicht so ist.

                                    Ich will das nicht weiter diskutieren.

                                    1. Hallo,

                                      viele Wege führen nach Rom... will deshalb auch gar nicht auf deinen Lösungsvorschlag eingehen, sondern auf die Art. Du schreibst dir hier einen Wolf um dich zu behaupten, knallst aber dem Fragesteller lapidar einfach erklärungslos ein paar Codezeilen hin, die diesen, offensichtlich noch unerfahrenen, User im Regen stehen lässt. Will damit also sagen, diese Schreib/Erklärungswut wäre in deiner Antwort sinnvoller gewesen.

                                      Gruss
                                      Henry

                                      1. Also wenn Du dieser Henry bist, dann gilt Deine Kritik auch für Deine Antwort

                                        Im Übrigen hatte ich mit "Alles andere sind die Definitionsfragen. Definitionsfragen löst kein Programm." durchaus darauf hingewiesen, dass noch Informationen fehlen. Zudem ergab sich das (Informationsbedürfnis) zu diesem Zeitpunkt längst auch aus dem Kontext der früheren Antworten Dritter.

                                        Ferner habe ich nicht, wie ein gewisser "Henry" (ich weiß nicht, ob Du das warst) einen verschachtelten Einzeiler "$res = substr(strrev(strstr(strrev(basename($str)),'.')),0,-1);" hingeworfen, sondern meinen Lösungsvorschlag auch noch in die einzelnen Zwischenschritte aufgelöst und gezeigt, wie man sich die Zwischenergebnisse ansieht.

                                        Ich denke schon, dass ich der Kritik gerechtfertigt entgegne.

                                        1. Hallo,

                                          deine Statements sind zumindest amüsant, echt jetzt (musste wirklich lachen).

                                          Ja dieser Henry bin ich und was du verlinkst war meine zweite Antwort hier im Thread und selbst diese habe ich noch erklärt, dass dies eine verfeinerte Version meiner ersten Antwort, die ebenfalls erklärt ist, um den letzten Punkt zu finden, sofern es der OP überhaupt benötigt.

                                          Aber ich freu mich schon auf deinen nächsten Kommentar 😉 komm gibs mir, will weiter lachen

                                          Gruss
                                          Henry

                                          1. Ich habe "gesagt, was zu sagen war". Deine Äußerung gibt inhaltlich nichts weiter her. An dieser Stelle beende ich diese Diskussion nunmehr auch mit Dir und mit Gunnar.

                                    2. Hallo Regina Schaukrug,

                                      Einen Herrn Darwin haben weit mehr, zu der Zeit noch hoch angesehene Personen übel beschimpft. Und doch hatte er recht.

                                      Sag das mal Chuck Norris. 😉

                                      Erst wikipediaen, dann grinsen und ggf. antworten.

                                      Ich will das nicht weiter diskutieren.

                                      Muss auch nicht sein.

                                      Bis demnächst
                                      Matthias

                                      --
                                      Rosen sind rot.
                                      1. Sag das mal Chuck Norris. 😉

                                        Naja. Immer diese Filmcharaktere. Bisher hat man mich eigentlich eher mit einem gewissen MacGyver verglichen. Von wegen "In der Not baut der Teufel Fliegen" oder so ähnlich.

                                        1. Hallo Regina Schaukrug,

                                          Sag das mal Chuck Norris. 😉

                                          Naja. Immer diese Filmcharaktere.

                                          Was ich meine, bezieht sich aber nicht auf einen Filmcharakter sondern auf die Tatsache, dass er ein Kreationist ist.

                                          Bis demnächst
                                          Matthias

                                          --
                                          Rosen sind rot.
                    2. Fachliche Vorgaben neigen zu technischer Unvollständigkeit.

                      Deswegen muss der Techniker dafür sorgen, dass Randbedingungen abgefangen werden bzw. validieren, dass Vorbedingungen (wie „Name hat eine Extension“) erfüllt sind.

                      Und wenn eine Library-Funktion da ist, die die gewünschte Aufgabe zumindest näherungsweise erfüllt, ist es immer besser, die einzusetzen. Denn man sollte davon ausgehen, dass diese Funktionen ordentlich getestet sind. Das erspart einem eigene Unit-Tests.

                      Rolf

                      1. Deswegen muss der Techniker dafür sorgen, dass Randbedingungen abgefangen werden bzw. validieren, dass Vorbedingungen (wie „Name hat eine Extension“) erfüllt sind.

                        Das die Vorbedingung „Name hat eine Extension“ nicht erfüllt sein könnte ist reine Spekulation. Es kann im Hinblick auf die Frage nämlich gut sein und ist sogar wahrscheinlich, dass die zu bearbeitenden Strings durch einen technischen Prozess (Programm) erzeugt werden, der eben das Dateisystem auswertet und dass eben diese Dateien durch einen weiteren technischen Prozess (Programm) erzeugt werden, durch welchen diese einen gleichförmigen Name haben.

                        Demnach ist es falsch, irgendwelche Vorprüfungen zu einer Vorbedingung für die Richtigkeit der Lösungen der nicht genau spezifizierten Aufgabe zu machen.

                        Und wenn eine Library-Funktion da ist, ... , ist es immer besser, die einzusetzen.

                        Sag das doch mal denen, deren Systeme durch kaputte Library-Funktionen kompromittiert wurden. Und vergiss nicht, dass "immer" besonders eindringlich auszusprechen. Vermutlich können die dann aber dem dadurch erhobenen Absolutheitsanspruch nicht viel abgewinnen.

                        1. @@Regina Schaukrug

                          Das die Vorbedingung „Name hat eine Extension“ nicht erfüllt sein könnte ist reine Spekulation. Es kann im Hinblick auf die Frage nämlich gut sein und ist sogar wahrscheinlich, dass die zu bearbeitenden Strings durch einen technischen Prozess (Programm) erzeugt werden, der eben das Dateisystem auswertet

                          Ja, es gab mal Dateisysteme, wo alle Dateien eine Extension hatten. Relevanz heutzutage?

                          und dass eben diese Dateien durch einen weiteren technischen Prozess (Programm) erzeugt werden, durch welchen diese einen gleichförmigen Name haben.

                          Mit deinen Worten: Das ist reine Spekulation.

                          Sag das doch mal denen, deren Systeme durch kaputte Library-Funktionen kompromittiert wurden.

                          AFAIS ist pathinfo Standard-PHP, keine Library-Funktion. Wenn Standard-PHP kaputt sein sollte, hat man wohl ganz andere Probleme.

                          LLAP 🖖

                          --
                          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                          1. Das die Vorbedingung „Name hat eine Extension“ nicht erfüllt sein könnte ist reine Spekulation. Es kann im Hinblick auf die Frage nämlich gut sein und ist sogar wahrscheinlich, dass die zu bearbeitenden Strings durch einen technischen Prozess (Programm) erzeugt werden, der eben das Dateisystem auswertet

                            Ja, es gab mal Dateisysteme, wo alle Dateien eine Extension hatten. Relevanz heutzutage?

                            Ich habe nicht behauptet, dass die Dateien wegen des Dateisystems (genau) eine Endung haben. Also werde ich auch nicht die Frage beantworten, welche Relevanz das heutzutage habe.

                            Ich habe genau das behauptet:

                            und dass eben diese Dateien durch einen weiteren technischen Prozess (Programm) erzeugt werden, durch welchen diese einen gleichförmigen Name haben.

                            Mit anderen Worten: Du knallst mir eine Unterstellung vor den Kopf und zitierst dann sogar meine Äußerung, die Deine Unterstellung klar ausschließt. Das ist kein guter Stil.

                            Mit deinen Worten: Das ist reine Spekulation.

                            Ja. Da die Problembeschreibung "dünn" ist spekuliert hier jeder. Und im Rahmen meiner Spekulation und unter der Prämisse meiner ergänzenden Äußerung "Alles andere sind die Definitionsfragen. Definitionsfragen löst kein Programm." ist mein Vorschlag nicht richtiger und auch nicht kritikwürdiger als jede andere.

                            Und ich sehe auch nicht, dass ich mit vollem Absolutheitsanspruch behauptet hätte, dass Lösungen anderer, die auf anderen Spekulationen beruhen, "falsch" seien. Das wäre von mir schlechter Stil und ich müsste mir dann vorwerfen lassen, andere grundlos vor den Kopf zu stoßen.

                            AFAIS ist pathinfo Standard-PHP, keine Library-Funktion. Wenn Standard-PHP kaputt sein sollte, hat man wohl ganz andere Probleme.

                            Nun, ich vermute - Nein! Ich weiß: es gibt ab und an mal irgendwo ein Problem in "Standard-PHP". Und irgendwie scheint es mir, diese sind um so wahrscheinlicher bzw. häufiger, je komplexer die betroffene Funktion(alität) ist.