UO-Dev Arama



scriptingte array kullanımı hakkında geniş bir arşiv

Yazar :: Mfusion
Tarih :: 17-05-2010 12:45
Karakter Boyut ::

Paylaş :: Paylaş




Merhaba arkadaşlar. Array kodunu çoğumuz kullanıyoruz. Ne işe yaradığını kısaca hatırlatayım.

TAG.DENEME yazi1,yazi2,yazi3
Buradaki virgül(,) ile ayrılmış değerlerin sırasına göre çekeriz ve işlemlerimizi yaparız.

Yazdığım bir kodda bunun yetersiz olduğunu farkettim ve detaylı bir array kütüphanesi hazırladım. Sizlerle paylaşıyorum.
Kod henüz çok yenidir. Hatalarını ve iyi kötü yorumlarınızı paylaşırsanız sevinirim.

explode ve strregex kullanımlarınızı pekiştirebilirsiniz

Kod:
[FUNCTION ARRAY]
LOCAL.text <EXPLODE {},<args>>
LOCAL.id <result 3,<local.text>>
LOCAL.type <result 4,<local.text>>
LOCAL.argv <eval <argv> -1>

IF STRREGEX(^self+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     LOCAL.return <EXPLODE =,<LOCAL.return>>
     LOCAL.return <result 2,<LOCAL.return>>

ELSEIF STRREGEX(^value+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     LOCAL.return <EXPLODE =,<LOCAL.return>>
     LOCAL.return <result 3,<LOCAL.return>>
     LOCAL.return <STREAT <EXPLODE .,<LOCAL.return>>>

ELSEIF STRREGEX(^loop+$,<LOCAL.type>)
     FOR <eval <LOCAL.id> + 4> <eval <LOCAL.argv> + 4>
          LOCAL.return .= ,<result <LOCAL._for>,<LOCAL.text>>
     ENDFOR
     LOCAL.return <STREAT <STREAT <EXPLODE .,<LOCAL.return>>>>

ELSEIF STRREGEX(^back+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     FOR <eval <LOCAL.id> + 3> 5
          LOCAL.return .= ,<result <LOCAL._for>,<LOCAL.text>>
     ENDFOR
     LOCAL.return <STREAT <EXPLODE .,<LOCAL.return>>>

ELSEIF STRREGEX(^[0-9]+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     LOCAL.return <EXPLODE =,<LOCAL.return>>
     LOCAL.return <result 3,<LOCAL.return>>
     LOCAL.return <EXPLODE .,<LOCAL.return>>
     LOCAL.return <result <eval <LOCAL.type> + 1>,<LOCAL.return>>

ELSEIF STRREGEX(^[a-z0-9]+$,<LOCAL.type>)
     LOCAL.to <STREAT <EXPLODE to,<LOCAL.type>>>
     FOR <eval <LOCAL.id> + 4> <eval <LOCAL.to> + 4>
          LOCAL.return .= ,<result <LOCAL._for>,<LOCAL.text>>
     ENDFOR
     LOCAL.return <STREAT <STREAT <EXPLODE .,<LOCAL.return>>>>

ENDIF
IF STRREGEX(^[a-z0-9]+$,<LOCAL.return>)
     RETURN <dLOCAL.return>
ENDIF
RETURN <LOCAL.return>

[FUNCTION result]
RETURN <argv[<argv[0]>]>


Kod karmaşık gelebilir fakat kullanımı bir o kadar basittir. Birden fazla örneklerle açıklayayım.
.dene fonksiyonuyla denemelerinizi hızlandıralım.

6 Çeşit kullanım mevcuttur. Bunlar; SELF, VALUE, VALUE X, TO X, LOOP, BACK

#1 SELF


TAG.deneme selam,merhaba,hello,hi,hola
Buradaki değerlerden herhangi bir tanesini alalım. Örneğin 1. olan "selam"

Kod:
[FUNCTION dene]
TAG.deneme selam,merhaba,hello,hi,hola
say <array {1,self}<TAG.deneme>>

ÇIKTISI > selam
Aynı şekilde diğer değerleride {değer,self} şekilde alabiliyorsunuz. {2,self} {3,self}...

#2 VALUE


TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
Burada selam= değerine ait olan tüm değerleri (sizede selam,naber) alalım.

Kod:
[FUNCTION dene]
TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
say <array {1,value}<TAG.deneme>>

ÇIKTISI > sizede selam,naber
Aynı şekilde diğer değerlerin alt değerlerinide {değer,value} şekilde alabiliyorsunuz.

#3 VALUE X


TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
Burada selam= değerine ait olan istediğimiz değeri alalım.

selam 1. sırada o yüzden ilk değerimiz yine 1
sizede selam selam= a ait olan 1. sıradaki değer.
naber selam= a ait olan 2. sıradaki değer.

Kod:
[FUNCTION dene]
TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
say <array {1,1}<TAG.deneme>>

ÇIKTISI > sizede selam

Farklı örnek
Kod:
[FUNCTION dene]
TAG.deneme selam=1.2.3.4.laylay,merhaba=sizede merhaba.90.60.88
say <array {1,1}<TAG.deneme>>

ÇIKTISI > 1

{1,5}
ÇIKTISI > laylay

{2,1}
ÇIKTISI > sizede merhaba

{2,2}
ÇIKTISI > 90

{2,4}
ÇIKTISI > 88

TAG.deneme selam=1.2.3.4.laylay,merhaba=sizede merhaba.90.60.88
Bu değerde selam,2 veya merhaba,3 değilde sadece asıl değeri almak isterseniz SELF devreye giriyor.
{1,self}
ÇIKTISI > selam

{2,self}
ÇIKTISI > merhaba

Yani alt değerlerini göstermiyor.

VALUE değerini toparlamak gerekirse;
KATEGORI BIR=alt kategori bir.alt kategori iki.alt kategori uc,KATEGORU IKI=alt kategori bir.alt kategori iki

Seçtiğiniz kategorinin tüm alt kategorileri için {KATEGORI ID,value}
Seçtiğiniz kategorinin, seçtiğiniz alt kategorisi için {KATEGORI ID,ALT KATEGORI ID}
Sadece kategori için {KATEGORI ID,self}

VALUE kullanırken dikkat edilmesi gereken kısım, selam= yani kategoriden sonra gelen her kelimeyi yani alt kategorileri nokta(.) ile ayırmaktır.
örnek: x=bu bir deneme yazisidir.deneme 1.2.3


#4 LOOP


TAG.deneme 1,2,3,4,5,6,7,8,9
Burada örneğin 4 ve sonraki değerleri almak istiyoruz.

Kod:
[FUNCTION dene]
TAG.deneme 1,2,3,4,5,6,7,8,9
say <array {4,loop}<TAG.deneme>>

ÇIKTISI > 4,5,6,7,8,9
Yani belirli bir değerden sonra bir döngü yapıyoruz.

#5 BACK


TAG.deneme 1,2,3,4,5,6,7,8,9
Burada örneğin 4 ve önceki değerleri almak istiyoruz.

Kod:
[FUNCTION dene]
TAG.deneme 1,2,3,4,5,6,7,8,9
say <array {4,back}<TAG.deneme>>

ÇIKTISI > 4,3,2,1
LOOP fonksiyonun aksidir. Geriye doğru sayar.

#6 TO X


En sevdiğim fonksiyondur. Sadece bunun için başladım diyebilirim (:
TAG.deneme 1,2,3,4,5,6,7,8,9
Burada örneğin 2 den 8 e kadar olan değerleri almak istiyoruz.

Kod:
[FUNCTION dene]
TAG.deneme 1,2,3,4,5,6,7,8,9
say <array {2,to8}<TAG.deneme>>

ÇIKTISI > 2,3,4,5,6,7,8

Dikkat edilmesi gereken husus, to X değerinin, ilk değerden büyük olmasıdır. Yani {5,to3} hatalıdır. Doğrusu {2,to4} olmalıdır.

Farklı örnek
Kod:
[FUNCTION dene]
TAG.deneme selam,hello,hi,hola,merhaba,uo,dev,array,mfusion
say <array {2,to8}<TAG.deneme>>

ÇIKTISI > hello,hi,hola,merhaba,uo,dev,array
Yani hello dan array a kadar olan kısmı gösterir.

LOOP,BACK, TO X fonksiyonu, sadece sayılar için geçerli değildir. Örnekleri kavramanız bakımından sayı ile belirttim.

Son bir karışık örnek.
TAG.deneme kategori=alt 1.alt 2,developer,7,6,merhaba,cat=selam.uo
{1,value} > alt 1,alt 2
{1,2} > alt 2

{2,self} > developer
{2,1} > 0 2 yani developer bir kategori olmadığı için çıktısı 0
{2,value} > 0 2 yani developer bir kategori olmadığı için çıktısı 0

{3,self} > 7
{4,self} > 6

{6,self} > cat
{6,1} > selam

{3,loop} > 2,2,merhaba,cat=selam,merhaba
{4,back} > 2,2,merhaba,selam,kategori=alt 1,alt 2

{3,to5} > 2,2,merhaba

Saygılar. Umarım işinize yarar.

Yorumlar

Henüz yorum yapılmamıştır.

Oylamalar

Oylama::
Üyelerin oylama ortalaması (10 dışında) : Henüz Oylanmamış   
Oylar: 0

Keywords:


Sayfa açılma süresi 0.48 saniye
SQL toplam zamanı: 0.361 saniye - SQL sorgusu: 20 - Ortalama SQL zamanı: 0.01806 saniye