Schneller Check, ob Bild existiert???
Stefan Luger
- asp.net
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
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
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
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
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