Kod:
[FUNCTION strarray]
local.array <argn1>
local.endar <eval (<argn1>+<argn2>)-1>
if (<argn1> >= <argv>)
local.array 0
local.endar <eval <argn2>-1>
endif
if (<argn1> < 0)
local.array <eval <argv>+<argn1>>
local.endar <eval (<local.array>+<argn2>)-1>
endif
if (<argn2> == 0) || (<local.endar> >= <argv>)
local.endar <eval <argv>-1>
endif
for <local.array> <local.endar>
local.return .= ,<argv[<local._for>]>
endfor
if (<local.array> == 0)
local.return <streat <streat <streat <local.return>>>>
else
local.return <streat <local.return>>
endif
return <local.return>
Affınıza sığınarak kodun açıklamasını es geçiyorum. Bu yazı bütünü kadar daha sürer çünkü. Kullanımına gelince
oldukça basittir.
Spherede zaten var olan strsub komutu ile aynı mantıkla çalışır. Tek farkı strsub HARF HARF alırken, yazdığımı bu komut virgül(,) ile ayırdıklarımızı kelime kelime alır.
Kullanım örnekleri
tag.deneme selam,naber,iyiyim,senden,naber
[FUNCTION deneme]
say <strarray 0 1 <tag.deneme>>
Dönen değer
selam olacaktır.
say <strarray 0 2 <tag.deneme>> = selam,naber
say <strarray 0 4 <tag.deneme>> = selam,naber,iyiyim,senden
say <strarray 1 2 <tag.deneme>> = naber
say <strarray 1 3 <tag.deneme>> = naber,iyiyim
STRSUB mantığı ile çalıştığından fixlere ihtiyaç duydum. Şöyleki;
say <strarray 0 5 <tag.deneme>> = selam,naber,iyiyim,senden
say <strarray 0 4654 <tag.deneme>> = selam,naber,iyiyim,senden
Yani 2. değer toplam kelime sayısını aşıyorsa, ilk değerden sonraki tüm kelimeleri gösterir. Ayrıca,
say <strarray 0 0 <tag.deneme>> = selam,naber,iyiyim,senden
say <strarray 1 0 <tag.deneme>> = naber,iyiyim,senden
say <strarray 2 0 <tag.deneme>> = iyiyim,senden
Yani 2. değer 0 ise, ilk değerden sonra tüm kelimeleri gösterir.
Düz mantık olarak şöyle ifade edilebilir.
selam = 0
naber = 1
iyiyim = 2
senden = 3
naber = 4
0 1 değeri, 0 ile 1. yi
vermez.
İkinci değer olan 1, kendisini ifade eder. Yani "SELAM"
2 1 değeri sadece "İYİYİM" değerini verir.
Yani 2. değer, kaç toplamda kaç değer istediğimizi belirtir.
eksi(-) değerler de entegre edildi
strsub ta yer alan -1 2 gibi terse sorgu, yazdığım komutta da mevcut.
say <strarray -2 0 <tag.deneme>> = senden,naber
say <strarray -3 0 <tag.deneme>> = iyiyim,senden,naber
say <strarray -5 1 <tag.deneme>> = selam
say <strarray -5 2 <tag.deneme>> = selam,naber
say <strarray -5 0 <tag.deneme>> = selam,naber,iyiyim,senden,naber