N2O: Anhand des Dateinamens die Priorität erkennen

Hallo!

Wer weiß eine Lösung für dieses Problem?:

Angenommen, ich habe in einem Ordner viele txt-Dokumente, die von 001 bis 999 beziffert werden können. Alle diese Dateien enthalten PHP-Variablen (z.B. Inhalt von "001.txt" <?PHP $name="Der Name von 001";?>). Dann habe ich eine andere PHP-Datei, die die _fünf aktuellsten_, das heißt die fünf _derzeit_ höchsten Zahlen ermitteln soll. Also Beispiel: Ich habe Dateien von 001.txt bis 015.txt, dann muss die Datei wissen, dass 015.txt die höchste Zahl ist. Die weiteren 4 Dateien könnte man dann ja mittels Rechenoperation schnell feststellen. Es geht mir also um den Punkt, wie man feststellt, dass 015.txt die derzeit größte Datei auf dem Server ist. Wenn dann natürlich eine 016.txt dazukommt, soll das dann selbstverständlich die größte sein.

Geht sowas überhaupt mit PHP, oder muß ich da zu JavaScript oder so greifen? Bitte kein SQL!

Besten Dank für die Aufmerksamkeit.

Gruß
Lachgas

  1. Hallo Lachgas,

    das läßt sich doch alles über Schleifen regeln:

    $dir=opendir($verzeichnis_name);
    while($f=readdir($dir))
       {
       if($f!='.' && $f!='..' && is_file($verzeichnis_name.'/'.$f))
          {
          $b=explode('.',$f);
          $a[$b[0]]=$f;
          }
       }
    for($i=0;$a[$i];$i++);
    echo $i;

    $i ist dabei die Datei mit dem höchsten, aufeinander fortfolgenden Wert ($b[0]). Daraus leitet sich auch ab, das Du keine Lücken haben darfst!

    Gruß aus Berlin!
    eddi

    --
    Manchmal trifft es einen doch ganz unverhofft t86591:
    > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
    Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
    1. Hallo und Danke erstmal.

      Leider muss ich aber zugeben, dass ich noch ein blutiger Anfänger bzgl. PHP bin und gerade erst von HTML umgestellt habe. Also habe ich noch einige Fragen.

      $dir=opendir($verzeichnis_name);

      Ok. Kapiert. $verzeichnis_name ist meinetwegen = "texte"

      while($f=readdir($dir))

      Auch kapiert.

      {
         if($f!='.' && $f!='..' && is_file($verzeichnis_name.'/'.$f))

      Erste Frage: Was bedeuten diese ganzen Angaben? Fehlt da nicht die Angabe, dass es sich ja um TXT-Dateien handelt, also 001.txt?

      {
            $b=explode('.',$f);
            $a[$b[0]]=$f;
            }

      Teilweise kapiert ;-). $b ist der höchste Wert in $f. aber was ist $a.

      }
      for($i=0;$a[$i];$i++);

      Verstehe ich irgendwie auch nicht.

      Also, wenn jemand die Zeit (und die Lust) hat, das zu erklären, dann wäre ich froh.

      Sorry für die vielleicht eurer Ansicht nach dümmlichen Fragen.

      Gruß
      Lachgas

      1. Re:

        Leider muss ich aber zugeben, dass ich noch ein blutiger Anfänger bzgl. PHP bin und gerade erst von HTML umgestellt habe. Also habe ich noch einige Fragen.

        Dein Weg zum Glück: http://de3.php.net/manual/de/ ;)

        if($f!='.' && $f!='..' && is_file($verzeichnis_name.'/'.$f))
        Erste Frage: Was bedeuten diese ganzen Angaben? Fehlt da nicht die Angabe, dass es sich ja um TXT-Dateien handelt, also 001.txt?

        Für diesen Zusammenhang bedeutet dies in Worten ausgeschrieben etwa folgendes:

        Wenn (if) der ausgelesene Verzeichniszeiger/Dateiname ($f) kein (!=) Punkt ('.') ist und (&&) Verzeichniszeiger/Dateiname ($f) kein (!=) PunktPunkt/übergeordnetes Verzeichnis ('..') ist und (&&) die Funktion is_file() TURE zurückgibt,

        http://de3.php.net/manual/de/function.is-file.php
        http://de3.php.net/manual/de/language.operators.php

        Diese if-Anweisung geht davon aus, das nur Datein vom Namen [Zahl].txt enthalten sind, daher ist auch keine abfrage, ob es eine TXT-Datei ist, enthalten.

        {
              $b=explode('.',$f);
              $a[$b[0]]=$f;
              }
        Teilweise kapiert ;-). $b ist der höchste Wert in $f. aber was ist $a.

        $b ist dabei der Teil des Dateinamen, der vor dem Punkt steht. http://de3.php.net/manual/de/function.explode.php
        (Dabei fällt mir auf, die Dateinamen dürfen für dieses Beispielscript keine Nullen am anfan haben; also "1.txt" und "325454643.txt")
        $a ist dabei ein Datenfeld (http://de3.php.net/manual/de/language.types.array.php). Datenfelder haben die überaus angenehme Eigenschaft sich mit Schleifen (for() while() foreach()) auswerten zu lassen

        }
        for($i=0;$a[$i];$i++);
        Verstehe ich irgendwie auch nicht.

        http://de3.php.net/manual/de/control-structures.for.php

        Gruß aus Berlin!
        eddi

        --
        Manchmal trifft es einen doch ganz unverhofft t86591:
        > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
        Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
        1. Oh Mann, Danke für die Mühe! Du hast mich echt einen ergeblichen Schritt weitergebracht. Auch die Links sind sehr gut.

          Vielen Dank also,

          Gruß
          Lachgas