Tekil Mesaj gösterimi
Alt 17 Mart 2007, 20:35   #3
Çevrimdışı
telNET
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Select Case
VBScript’in bir diğer duruma bakarak karar verme ifadesi, Select Case (Durum Se&#231
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
yapısıdır. Bu kontrol öğesinin nasıl çalıştığını şöyle özetleyebiliriz:
Durum Seç (Durumların listesi veya durumları belirten bir değişken)
Durum 1 : Yapılacak işler
Durum 2: Yapılacak işler
Durum 3: Yapılacak işler
Durum n: Yapılacak işler
Seçmeyi Bitir
VBScript, verdiğiniz durum listesine veya içinde çeşitli değerler bulunan değişkene bakarak, bu değişkenin her bir değerini bir “durum” sayacak ve verdiğiniz durumlardan hangisini tutuyorsa, ona ait komut dizisini icra edecektir. Yukarıdaki sayfamızı bu kez bu yapıyı kullanarak yazalım (hosgeldiniz02.asp):
<HTML>
<HEAD>
<TITLE>ASP ILE SAATE G&#214;RE SELAM</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>
<%
Select Case Hour(Now)
Case 0,1,2,3,4,5,6,7,8,9,10,11
Response.Write "G&#252;naydın!"
Case 12,13,14,15,16,17
Response.Write "T&#252;naydın"
Case Else
Response.Write "İyi Akşamlar!"
End Select
Response.Write "<BR>"
Response.Write "Site Onarım Sitesine Hoşgeldiniz"
%>
</CENTER>
</H2>
</BODY>
</HTML>
Select Case komutuna, i&#231;indeki değerleri “durum” sayacağı dizi veya değişken olarak VBScript’in kullanılmaya hazır fonksiyonlarından Hour(Now)’ı veriyoruz. Bu fonksiyondan, 0 ile 24 arasında bir değer d&#246;necektir. Bu değer Select Case i&#231;in bir durum demektir. Select Case, bu değer ile altta sıralanan Case’leri karşılaştıracak ve elindeki değer hangi Case’i tutuyorsa ona ait komutları icra edecektir. Sonuncu Case’e l&#252;tfen dikkat edin: Burada Case olarak Else (başka) veriliyor. Bu bizi, 17’den 23’e kadar olan saatleri sıralamaktan kurtarır. 0’dan 11’e kadar olan saatlerle 12’den 17’ye kadar olan saatleri sıraladığımıza g&#246;re başka hangi saat olursa olsun, ziyaret&#231;imize “İyi akşamlar!” dileyebiliriz. Eğer 24’den sonra ve 04’den &#246;nce ziyaret&#231;inize “İyi geceler!” dilemek isterseniz, bu programı nasıl değiştirirdiniz?
D&#246;ng&#252;ler
Sınama bir programın akışını kontrol i&#231;in kullanacağımız birinci en &#246;nemli unsur ise, d&#246;ng&#252; de ikinci en &#246;nemli unsur sayılır. Hatta programcının tembellik katsayısına g&#246;re, belki de birinci en &#246;nemli unsuru bile sayılabilir! &#199;&#252;nk&#252; D&#246;ng&#252; (Loop) programa, bir işi biteviye yaptırmaya yarar. Tabi&#238; bu iş sonsuza kadar s&#252;recek olursa, buna Endless Loop (Sonsuz D&#246;ng&#252
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
denir; en iyi program ve Windows dondurma y&#246;ntemidir! VBScript’te kullanabileceğimiz d&#246;ng&#252; y&#246;ntemleri şunlardır:
For..Next d&#246;ng&#252;s&#252;
Programın bir işi belirli kere yapmasını istiyorsak, ona yapacağı işi bir saya&#231; değişkeniyle birlikte, For d&#246;ng&#252;s&#252;yle bildiririz:
For saya&#231; = başlangı&#231; To son Step adım
yapılacak işler
Next
Burada, “saya&#231;” yerine istediğiniz bir değişken adını, “başlangı&#231;” yerine sayacın başlamasını istediğiniz sayıyı, “son” yerine sayacın durmasını istediğiniz sayıyı, ve “adım” yerine, sayacın ka&#231;ar-ka&#231;ar artmasını istediğinizi yazabilirsiniz. En sondaki Next deyimi ise d&#246;ng&#252;n&#252;n bir sonraki adıma ge&#231;mesini sağlar. Bu adımda saya&#231;, Step kelimesi varsa, karşısındaki değer kadar arttırılır ve yapılacak işler yeniden yapılır. Bir &#246;rnek yapalım (gunler.asp):
<HTML>
<HEAD>
<TITLE>ASP ILE G&#220;NLERI SAYMA</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>
<%
Dim Gunler
Gunler = Array("Pazartesi", "Salı", "&#199;arşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar")
For sayac = 0 to 6
Response.Write Gunler(sayac)
Response.Write "<BR>"
Next
%>
</CENTER>
</H2>
</BODY>
</HTML>
Bu ASP kodunda, Gunler adıyla bir dizi-değişken oluşturuyoruz ve bu değişkenin yedi hanesine, g&#252;nlerin adlarını atıyoruz. Sonra, sayac adlı sayacı 0’dan 6’ya kadar arttırıyoruz (Bir saya&#231; birer birer artsın istersek, Step b&#246;l&#252;m&#252;ne adım sayısı yazmayız). Şimdi kendimizi bir an i&#231;in VBScript’in yerine koyalım ve birinci adımda yapacağımız işi d&#252;ş&#252;nelim: “Hmm.. Programcı bey, benim sayac’ı &#246;nce 0 yapmamı istiyor; peki sayac 0 olsun. Sonra, Gunler dizi-değişkeninden saya&#231; değeri ile aynı sayıyı taşıyan değişkeni alıp, bunu ziyaret&#231;inin Browser’ına yazmamı istiyor. Peki, Gunler(0) ne imiş, bakalım. Hmm Gunler(0) Pazartesi imiş. o halde ziyaret&#231;inin ekranına bir Pazartesi kelimesi yazalım. Sonra bir de <BR> kodu yazmamı istiyor. Onu da yazalım.. Şimdi, sırada Next var. Yani bir sonraki adıma devam edeceğiz. Step değeri olmadığına g&#246;re sayacı bir arttırayım. Saya&#231; b&#246;ylece 1 oldu. ...”
Ve b&#246;ylece VBScript, sayacın son değeri olan 6’ya ulaşıncaya kadar, biteviye Gunler dizi-değişkeninden sayacın değerine g&#246;re değer se&#231;erek ve bunu ekrana yazdırarak, işini yapacaktır. Bu bakımdan VBScript, g&#252;venilir ve &#231;alışkan bir arkadaştır!
While...Wend
Ne var ki, program mantığı bazen bize b&#246;yle a&#231;ık ve se&#231;ik bir saya&#231; kurma imkanı vermez. Saya&#231; olarak kullanacağımız değer, programın başka bir b&#246;l&#252;m&#252; tarafından &#252;retiliyor olabilir. Veya bu değer ziyaret&#231;i tarafından belirlenmiş olabilir. &#214;zetle yapılmasını arzu ettiğimiz işin ancak saya&#231; bir değerden azsa, &#231;oksa veya eşitse yapılmasını, bu durum değişirse durmasını isteyebiliriz. Bunu While (..iken) komutuyla yapabiliriz. While d&#246;ng&#252;s&#252;n&#252; kullandığımız zaman sayacı bizim arttırmamız gerekir.
S&#246;zgelimi, yukarıdaki programın 7 g&#252;n&#252;n t&#252;m&#252;n&#252; ekrana yazmasını değil de, mesela g&#252;n sayısı 5’den k&#252;&#231;&#252;k ise yazmasını istiyor olabiliriz. Bu durumda kodumuzda For.. Next arasında kalan b&#246;l&#252;mde şu değişikliği yapabiliriz:
While sayac <= 5
Response.Write Gunler(sayac)
Response.Write "<BR>"
sayac = sayac + 1
Wend
Burada While d&#246;ng&#252;s&#252;n&#252;n Wend kelimesiyle sonlandırıldığına dikkat edin. While satırındaki sayacı değiştirdik, programın saya&#231; 5’den k&#252;&#231;&#252;k veya 5’e eşit iken işlemesini sağladık. For’dan farklı bir diğer ifade ise sayacı arttıran “sayac = sayac + 1” ifadesidir. Bu ifade, ilk bakışta garip g&#246;r&#252;nebilir. Fakat bilgisayar a&#231;ısından bu “sayac’ın o andaki değerini al, 1 ile topla ve bulduğun yeni değeri sayacın mevcut değerinin yerine yaz!” demektir. VBScript sayacı bir arttırdıktan sonra &#246;nce While satırındaki şartın ger&#231;ekleşip ger&#231;ekleşmediğine bakar; ger&#231;ekleşmiş ise Wend’i izleyen ilk satıra gider; ger&#231;ekleşmemişse While d&#246;ng&#252;s&#252;n&#252;n i&#231;indeki işi yapmaya devam eder. Kendinizi VBScript’in yerine koyup, birinci ve ikinci adımda nasıl d&#252;ş&#252;nd&#252;ğ&#252;n&#252;z&#252; ve ne iş yaptığınızı s&#246;yleyebilir misiniz?
Do..Loop
Do (Yap) komutu ile kuracağımız d&#246;ng&#252;ler iki ayrı t&#252;rde olabilir: bu d&#246;ng&#252; ile bir dizi komutu, bir koşul doğru iken veya doğru oluncaya kadar yaptırabiliriz. Bu y&#246;ntemlerden her biri iki ayrı şekilde yazılabilir. Bir koşul doğru iken bazı işlerin biteviye yapılmasını istiyorsak, Do While y&#246;ntemini kullanırız:
Do While koşul
koşul doğru iken yapılacak işler
Loop
Bu ifade ile VBScript koşul doğru olduğu s&#252;rece istediğimiz işi yapacaktır. Buradaki Loop kelimesi, d&#246;ng&#252;n&#252;n başa d&#246;nmesini sağlar. Bu y&#246;ntemden şu şekilde de yararlanabiliriz:
Do
koşul doğru iken yapılacak işler
Loop While koşul
Burada, Loop komutu şartın h&#226;l&#226; doğru olup olmadığını sınar ve doğru ise verilen işleri yapar; artık değilse bir sonraki satıra ge&#231;er.
D&#246;ng&#252;n&#252;n bir şart ger&#231;ekleşinceye kadar bir işi yapmasını ise Do Until y&#246;ntemiyle sağlarız. Bu durumda d&#246;ng&#252; ş&#246;yle yazılır:
Do Until koşul
koşul ger&#231;ekleşinceye kadar yapılacak işler
Loop
Bu ifade ile VBScript koşul doğru oluncaya kadar istediğimiz işi yapacaktır. Buradaki Loop kelimesi, d&#246;ng&#252;n&#252;n başa d&#246;nmesini sağlar. Bu y&#246;ntemden şu şekilde de yararlanabiliriz:
Do
koşul ger&#231;ekleşinceye kadar yapılacak işler
Loop Until koşul
Burada, Loop komutu şartın hen&#252;z ger&#231;ekleşip ger&#231;ekleşmediğini sınar ve hen&#252;z ger&#231;ekleşmemişse verilen işleri yapar; ger&#231;ekleşmişse bir sonraki satıra ge&#231;er.
Visual Basic metinlerinde bu d&#246;ng&#252;ye verilen klasik &#246;rnek, bilgisayara yazı-tura attırmaktır! Biz de ASP sayfamıza yazı-tura attırabiliriz. Bunun i&#231;in şu kodu yazın ve yazi-tura.asp adıyla kaydedin:
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE YAZI-TURA</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<H2>
<CENTER>
<%
Dim ParaAt, Yazi, Tura, Atis
Randomize
Yazi = 0
Tura = 0
Atis = 0
Do While Tura < 3
atis = Atis + 1
ParaAt = Int(Rnd * 2) + 1
If ParaAt = 1 Then
%>
Yazı!<P>
<%
Yazi = Yazi + 1
Else
%>
Tura!<P>
<%
Tura = Tura + 1
End If
Loop
%>
3 Tura getirebilmek i&#231;in parayı <%=Atis%> kere atmak gerekti!
</HTML>
Bu kodda şu ana kadar karşımıza &#231;ıkmamış olan Randomize (Tesad&#252;f&#238; sayı bulma) Fonksiyonu’nun kullanıldığını g&#246;r&#252;yoruz.
Tesad&#252;f&#238; Sayı
Bilgisayarın matematik işlemlerde, &#246;zellikle istatistik hesaplamalarla kullanılması tesad&#252;f&#238; (rastlantısal) sayı &#252;retmeyi gerekli kılmıştı. Fakat daha sonra bilgisayar oyunları bu işlemi adeta zorunla hale getirdi. Rastlantısal sayı, bir dizide tekrar etmesi belirli bir d&#252;zene tabi olmayan sayı demektir. Bilgisayar yokken, tesad&#252;f&#238; sayı tabloları matematik&#231;iler tarafından uzun uğraşlarla &#252;retilirdi.
VBScript, bu ama&#231;la Visual Basic’in Randomize ve Rnd komutlarını almıştır. Randomize, tesad&#252;f&#238; sayı &#252;retme s&#252;recini başlatır; Rnd da bu sayıyı size verir. Kodunuzda bir yerde Rnd kullanacaksınız, ondan &#246;nce bir yerlerde mutlaka Randomize komutunun yer alması gerekir. Bunun bir uygulaması şu olabilir:
<% OPTION EXPLICIT %>
<HTML>
<%
Dim TesadufiSayi
Randomize
TesadufiSayi = Rnd
%>
<%=TesadufiSayi%>
</HTML>
Bu dosyayı tesaduf.asp adıyla kaydedip &#231;alıştırın; Browser’ın Yenile d&#252;ğmesini her tıkladığınızda ekranda yeni bir sayı g&#246;receksiniz. Bu sayıların rastlantısal olması, bir kere daha gelmeleri i&#231;in hi&#231; bir kural (&#246;rneğin her rakamın 123 kerede bir gelmesi veya 1 milyon 245 bin kerede bir gelmesi gibi) bulunmamasıdır. İşin tekniğini bilmek isterseniz, VBScript, her Rnd komutu icra edildiğinde bilgisayarın saatini &#246;ğrenir; i&#231;inden se&#231;eceği bir rakamı son derece karmaşık bir form&#252;lden ge&#231;irerek size bir rakam verir. bu rakam daima 0 ile 1 arasında olur. “(Rnd*6)+1” form&#252;l&#252; bize 1 ile 6 arasında (yani bir zarın değerlerinden her hangi biri), “(Rnd*13)+1” form&#252;l&#252; ise 1 ile 13 arasında (yani bir iskambil destesindeki kağıt değerlerinden herhangi biri) bir değer verir. Fakat dikkat: bu değerler tam sayı değildir!
Programımızın b&#252;t&#252;n işlemi Do d&#246;ng&#252;s&#252; b&#246;l&#252;m&#252;nde yapılıyor ve bilgisayarın bir tesad&#252;f&#238; sayı &#252;retmesi esasına dayanıyor. Bunu Randomize ve Rnd fonksiyonları ile yapıyoruz. Rnd’un verdiği tesad&#252;f&#238; rakamı, iki ile &#231;arpıyor ve &#231;ıkan sayıyı 1 ile topluyoruz; b&#246;ylece ortaya 1’den b&#252;y&#252;k 3’den k&#252;&#231;&#252;k bir kesirli rakam &#231;ıkmış oluyor (Neden?). Bu rakamı Int() fonksiyonundan ge&#231;irerek, kesirinden kurtarıyoruz.
Tam Sayı Elde Etmek i&#231;in: Int ve Round
Rnd fonksiyonu ile ilgili yukarıdaki &#246;rneği yaptıysanız, d&#246;nen sayının 0 ile 1 arasında, yani daima kesirli olduğunu g&#246;rm&#252;ş olmalısınız. Bazen bizim sayfalarımızdaki hesaplamalar veya veritabanından alınan değerler de kesirli olabilir. &#214;rneğin &#246;ğrencilerin not ortalamalarını hesaplattırırken VBScript size sonu gelmez kesirler verecektir. Oysa &#231;oğu zaman bu rakamların ya yukarı “yuvarlanması”, ya da sadece tam sayı b&#246;l&#252;m&#252; gerekir.
VBScript’te Int() fonksiyonu, bize bir sayının tam sayı b&#246;l&#252;m&#252;n&#252; verir. Diyelim ki elimizdeki KesirliSayi değişkeninin değeri 123,234567 olsun.
Tamsayi = Int(KesirliSayi)
işleminden sonra Tamsayi değişkenin değeri 123 olur.
Fakat kimi zaman bir sayının kesirli b&#246;l&#252;m&#252;n&#252; b&#246;yle bı&#231;akla kesip atmak işimize gelmeyebilir. Round() fonksiyonu, kesirli bir sayıyı yukarı veya aşağı “yuvarlayarak” tam sayı haline getirir. Bu kez ki elimizdeki KesirliSayi değişkeninin değeri 5,6 olsun.
Tamsayi = Int(KesirliSayi)
işleminden sonra Tamsayi değişkenin değeri 6 olur. Kesirli sayı 56,2 ise, Round() fonksiyonu bize 56 değerini verir.
Programımız, elde ettiği ve Paraat değişkenine kaydettiği bu sayı 1 ise, Yazı gelmiş sayıyor; ve Browser Penceresine “Yazı!” yazıyor. Bu arada yapılan atış sayısını kaydettiğimiz Atis ve gelen tura sayısını tuttuğumuz Tura değişkenlerinin değeri bir arttırılıyor. ParaAt değişkeninin değeri başka bir şeyse (ne olabilir?), programımız bu kez tura geldiğine h&#252;kmediyor ve Browser penceresine “Tura!” yazıyor. Do d&#246;ng&#252;s&#252;, Tura gelen atışların sayısı 3 oluncaya kadar devam ediyor. &#199;&#252;nk&#252; Do d&#246;ng&#252;s&#252;n&#252; While Tura < 3 (Tura 3’den az iken) deyimi ile &#231;alıştırıyoruz. Ve program sonunda 3 tura gelinceye kadar ka&#231; atış yaptığını yazıyor.
Bu ASP sayfası g&#246;r&#252;nt&#252;lenirken Browser’ın Yenile d&#252;ğmesini tıklarsanız, her seferinde Tura getirmek i&#231;in farklı sayıda atış yapmak gerektiğini; aynı sayıda atış yapılsa bile turalarla yazıların yerinin değiştiğini g&#246;receksiniz.
Dizi değişkenler i&#231;in d&#246;ng&#252;: For Each..Next
For..Next gibi &#231;alışan bu &#246;zel d&#246;ng&#252;, saya&#231; değeri kullanmaz, fakat bir dizi değişkenin b&#252;t&#252;n değerleri i&#231;in bir kere icra edilir. Dizi-değişkenler, VBScript ile yapacağımız işlemlerde &#246;nemli bir yer tutar. &#214;rneğin bir sınıftaki &#246;ğrencilerin veya m&#252;şterilerimizin listesi bir dizi değişkenin elemanları olabilirler. Yapmak istediğimiz işlem, dizi-değişkenin b&#252;t&#252;n elemanları i&#231;in tekrar edilecekse, For Each..Next d&#246;ng&#252;s&#252; daha elverişli olabilir. Bir dizi-değişkenin eleman sayısı ilerde değişirse ve siz d&#246;ng&#252;y&#252; For..Next ile kurmuşsanız d&#246;ng&#252;n&#252;n sayacı i&#231;in verdiğiniz i&#231;in alt ve &#252;st sınırı değiştirmek zorunda kalırsınız. Oysa For Each, ka&#231; kere tekrar edeceğine ilişkin değeri her zaman dizi-değişkenin elemanların sayısından alır. &#214;rneğin, b&#252;t&#252;n &#246;ğrencilerin listesini tutan &#214;grenciler dizi-değişkeninin b&#252;t&#252;n elemanlarının değerini ekrana yazdıralım:
For Each Ogrenci In Ogrenciler
Response.Write Ogrenci
Next
Burada “Ogrenci” Ogrenciler dizi-değişkeninde d&#246;ng&#252;n&#252;n her adımında okunan bir elemanın değerini tutar. For Each d&#246;ng&#252;s&#252; tarafından “okunmakta olan” dizi-değişkenin her bir değeri sırayla bu değişkene yazılacaktır. Bunu bir t&#252;r endeks değişken olarak d&#252;ş&#252;nebilirsiniz.
D&#246;ng&#252;y&#252; durdurmak isterseniz
Bir d&#246;ng&#252;den belirlediğiniz koşul ger&#231;ekleşsin-ger&#231;ekleşmesin &#231;ıkmanız gerekebilir. Bunu bir başka değişkendeki değişiklik zorunlu kılabilir. Bir d&#246;ng&#252;den &#231;ıkmak i&#231;in Exit (&#231;ık) ifadesini kullanabilirsiniz. Bu ifade, d&#246;ng&#252;n&#252;n yaptığı işler arasında, genellikle bir If deyimi ile birlikte yer alır. &#214;rneğin:
For sayac = 1 to 10
[..bir takım işler yap..]
If Degisken1 > Degisken 2 Then Exit For
[..bir takım işlere devam et..]

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet reklamver