jmac698
24th August 2011, 11:24
This is like FindStr but finds a class of character, like the first number, letter, symbol or specially defined character.
#FindStrClass Ver 0.9 by jmac698
#A Script Function to find the next number, letter, symbol, etc.
s="x 0"
r1=FindStrClass(s,4,"")
r2=FindStrClass(s,2,"")
r3=FindStrClass(s,3,"")
msg="With '"+s+"' the first letter at "+string(r1)+" first number at "+string(r2)+" first symbol or number at "+string(r3)
return messageclip(msg)
function FindStrClass(string base, int classmask, string special){
#Return position of specified character class
#symbol=1, number=2, letter=4, special=8, null=0
#these can be combined for classmask,
#e.g. maskclass=14 is special or letter or number
FindStrClass2(base, classmask, special, 1)
}
function FindStrClass2(string base, int classmask, string special, int currpos){
substr=midstr(base,currpos,1)
t=binbool(strClassify(substr, special),classmask,"and")!=0 || currpos==strlen(base)+1
t ? currpos : \
FindStrClass2(base, classmask, special, currpos+1)
}
function binbool(int a, int b, string op){
#Find the binary AND or OR on a and b
op=lcase(op)
op=op=="or"?"||" : \
op=="and"?"&&" : \
strlen(op)==1?op+op:op
binbool2(a, b, op, 0)
}
function binbool2(int a, int b, string op, int currresult){
m=max(a,b)
pwr2=int(pow(2,floor(log(m)/log(2))))
bit_a=floor(a/pwr2)
bit_b=floor(b/pwr2)
t=eval(string(bool(bit_a))+op+string(bool(bit_b)))?pwr2:0
currresult=currresult+t
a=a-bit_a*pwr2
b=b-bit_b*pwr2
a+b==0?currresult:binbool2(a, b, op, currresult)
}
function bool(int n){
#Return false if n=0, true otherwise
n==0?false:true
}
function strClassify(string s, string special){
#Classify a character as symbol (1), number (2), letter (4), special (8) or null (0)
s=leftstr(s,1)
s=="" ? 0 : \
s==special ? 8 : \
(s>="a" && s<="z") || (s>="A" && s<="Z") ? 4 : \
s>="0" && s<="9" ? 2 : \
1
}
#FindStrClass Ver 0.9 by jmac698
#A Script Function to find the next number, letter, symbol, etc.
s="x 0"
r1=FindStrClass(s,4,"")
r2=FindStrClass(s,2,"")
r3=FindStrClass(s,3,"")
msg="With '"+s+"' the first letter at "+string(r1)+" first number at "+string(r2)+" first symbol or number at "+string(r3)
return messageclip(msg)
function FindStrClass(string base, int classmask, string special){
#Return position of specified character class
#symbol=1, number=2, letter=4, special=8, null=0
#these can be combined for classmask,
#e.g. maskclass=14 is special or letter or number
FindStrClass2(base, classmask, special, 1)
}
function FindStrClass2(string base, int classmask, string special, int currpos){
substr=midstr(base,currpos,1)
t=binbool(strClassify(substr, special),classmask,"and")!=0 || currpos==strlen(base)+1
t ? currpos : \
FindStrClass2(base, classmask, special, currpos+1)
}
function binbool(int a, int b, string op){
#Find the binary AND or OR on a and b
op=lcase(op)
op=op=="or"?"||" : \
op=="and"?"&&" : \
strlen(op)==1?op+op:op
binbool2(a, b, op, 0)
}
function binbool2(int a, int b, string op, int currresult){
m=max(a,b)
pwr2=int(pow(2,floor(log(m)/log(2))))
bit_a=floor(a/pwr2)
bit_b=floor(b/pwr2)
t=eval(string(bool(bit_a))+op+string(bool(bit_b)))?pwr2:0
currresult=currresult+t
a=a-bit_a*pwr2
b=b-bit_b*pwr2
a+b==0?currresult:binbool2(a, b, op, currresult)
}
function bool(int n){
#Return false if n=0, true otherwise
n==0?false:true
}
function strClassify(string s, string special){
#Classify a character as symbol (1), number (2), letter (4), special (8) or null (0)
s=leftstr(s,1)
s=="" ? 0 : \
s==special ? 8 : \
(s>="a" && s<="z") || (s>="A" && s<="Z") ? 4 : \
s>="0" && s<="9" ? 2 : \
1
}