Mfusion -  17-05-2010 12:45
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 (2)

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

BENZER SAYFALAR