Stefan Luger: Schneller Check, ob Bild existiert???

Hallo,
ich habe hier ein Script, in dem mehrere Schleifen ineinander geschachtelt sind. Unter anderem wird geprueft, ob es in einen Verzeichnis ein Bild gibt oder nicht. Wenn es dieses Bild gibt, wird es angezeigt, wenn nicht, dann eben ein default Bild.
Nun meine Frage, gibt es dafuer ein Script, dass schnell macht (ohne wie in dem alten script jedes Mal das gesamte Verzeichnis zu durchsuchen)?
Stefan

Hier das alte Script:
locRec("acc_aut_code") ist der ausgelesene Name aus der DB.

imgex = 0
for each fil in filecoll
       filename = fil.name
 acode = split(filename, "_")

if acode(0) = replace(locRec("acc_aut_code"), "/", "") then  imgex = 1
 end if
next

if imgex = 0 then       imgsrc = "default.jpg"
else         imgsrc = replace(locRec("acc_aut_code"), "/", "") & "_1.jpg"
end if

  1. Moin Moin !

    Was genau speicherst Du in der DB? Der Code sieht ja fürchterlich aus ...

    Du willst wahrscheinlich einfach nur testen, ob die Datei unter dem Namen, wie er in der DB steht, existiert.

    Sowas in dieser Art sollte dir helfen:

    name=lies_den_namen_aus_der_datenbank();
      if fileexist("D:\prefix\" && name && "_1.jpg")
         imgsrc=name && "_1.jpg"
      else
         imgsrc="default.jpg"
      endif

    Die Funktion fileexist gibt es wahrscheinlich so nicht, sie wird vermutlich einen anderen Namen haben, siehe Doku. Im Zweifel kannst Du auch einfach versuchen, ob Du die Datei zum Lesen öffnen kannst.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hi,
      in der DB sind viele Hotels und Unterkuenfte gespeichert (mache bei einer Firma Praktikum, die sowas vermittelt).
      Die Suchfunktion nach Name oder Ort ist einfach sehr langsam, das dauert zu lange. Deshalb soll ich das schneller machen. Habe diese Funktion auskommentiert und es lief super schnell (halt leider ohne Bilder und ohne weiterklicken auf das Bild...).

      Den genauen Namen kann ich nicht nehmen, da in der DB der Kurzname (acc_aut_code) gespeichert ist, unter dem das Hotel bei uns gefuehrt wird. Und zu jedem Hotel gibt es mehrere Bilder im Verzeichnis, er soll jeweils das erste nehmen. Aber das denke ich, ist mal nicht so das Problem, das Problem ist eben das durchlaufen des gesamten Verzeichnis. (Und dies in einer weiteren Schleife, also doppelt so oft.. das dann ein Server Time out vorommt, ist auch klar...)

      Danke, werde das mal mit dem filexist versuchen zu finden.
      Stefan

      1. Moin Moin !

        Den genauen Namen kann ich nicht nehmen, da in der DB der Kurzname (acc_aut_code) gespeichert ist, unter dem das Hotel bei uns gefuehrt wird. Und zu jedem Hotel gibt es mehrere Bilder im Verzeichnis, er soll jeweils das erste nehmen.

        Wie hängen acc_aut_code und Bildname zusammen?

        Im simpelsten Fall entspricht acc_aut_code einem Verzeichnis mit allen Bildern des Hotels. Existiert das Verzeichnis, gibt es Bilder, existiert es nicht, gibt es keine Bilder.
        (Was hindert Dich ggf., die Verzeichnisse so umzusortieren?)

        foobarhotel => D:\bilder\foobarhotel\1.jpg

        Wenn's schlimmer wird, sind Teile von acc_aut_code Verzeichnisse und Teile der Prefix des Dateinamens. So ungefähr habe ich deinen Code gelesen.

        foo_bar_hotel => D:\bilder\foo\bar\hotel_1.jpg

        In diesem speziellen Fall (meinem Beispiel):
        * nimm acc_aut_code
        * ersetze alle Unterstriche durch Backslashes (dafür sollte es eine fertige Replace-All-Funktion geben)
        * hänge "_1.jpg" an

        Danke, werde das mal mit dem filexist versuchen zu finden.

        Wie gesagt, im zweifel Open nehmen (ist aber meistens langsamer).

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. Servus,
          Verzeichnisse fuer jedes Hotel geht nicht (da diese Bilder von vielen Dateien genutzt werden, dann muesste ich alle aendern.. wuedre Jahre dauern...)

          Acc_aut_code ist sowas wie "SP77", Bildnamen sowas wie "sp77_1.jpg" bis zu Bild 4. Weshalb der vorige Programmierer "/" ersetzt, keine AHnung. Aber an den acc_aut_code muss eben "_1.jpg" gestetzt werden, dann geht das.

          Sind auf eine andere Idee gekommen:
          Wenn ein Bild existiert, dann nimm es, ansonsten zeige das Windows Fehlerbild an (kleines rotes Kreuz). Nicht elegant, aber es geht (haben jetzt ein paar andere Probleme, da es absoluter Spagehtti Code ist --> ca. 40 if's, 10 Schleifen, keine Doku....)

          So long
          Stefan