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.
|