Anasayfa
UO Sunucular
Forumlar
Profilim
UO-Developer.COM
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
[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"
[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.
[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.
[FUNCTION dene]
TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
say <array {1,1}<TAG.deneme>>
ÇIKTISI > sizede selam

Farklı örnek
[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.
[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.
[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.
[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
[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.

UO-Dev SPONSOR

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?

UO-Dev SPONSOR

Clad 13-09-2010 19:21
Array 'ı hiç kafam almadı yada normal bir zamanım da okumadım sanırım ondan da olabilir ama güzel gözüküyor birçok yerde kullanabiliriz...
xwerswoodx 01-02-2012 19:26
Gereksiz, daha ufak kullanımlarla hızlı işlem yaptırmak varken array'ı tercih etmezdim

Üyelerin oylama ortalaması (10 dışında) :

1.00

Oylar: 1 den itibaren 01-02-2012 19:26

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?