Dr. Dread Professional Member
Joined: 03 Aug 2001 Posts: 1065 Location: Copenhagen, Denmark
|
Posted: Thu Sep 19, 2002 9:56 pm Post subject: String processing - search&replace (+ case-sensitivity) |
|
|
This puppy is sorta based on a search and replace idea from PGWARE for moving the string chunkwise off to a
variable. This one goes a level further:
* allows you to toggle case sensitivity
* handles multiple-character search strings
Greetz
Dr. Dread
Code: |
list create,1
list add,1,"@POS(<String1>,<String2>)
list add,1,"This function returns the starting character position
list add,1,"of the first occurrence of <String1> in <String2>.
list add,1,"The characters in the string are counted from 1.
list add,1,"The value 0 is returned if either string is empty or
list add,1,"<String1> does not occur in <String2>.
list add,1,"Note that the comparison is not case sensitive.
rem Search string
%S = "String"
rem Replace string
%R = "value"
rem Toggle case-sensitivity by setting %%casesense to 0 or 1
%%casesense = 1
if @equal(%%casesense,1)
gosub case-sense
else
gosub non-sense
end
list add,1,@cr()@cr().. by Dr. Dread
info @text(1)
list close,1
exit
:case-sense
%%index = 0
repeat
%%instring = @item(1,%%index)
%%newstring = ""
repeat
%%pos = @pos(%S,%%instring)
if @greater(%%pos,0)
if @equal(@substr(%%instring,%%pos,@pred(@sum(%%pos,@len(%S)))),%S,exact)
if @equal(%%pos,1)
%%newstring = %%newstring%R
else
%%newstring = %%newstring@substr(%%instring,1,@pred(%%pos))%R
end
%%instring = @strdel(%%instring,1,@pred(@sum(%%pos,@len(%S))))
else
if @equal(%%pos,1)
%%newstring = %%newstring@substr(%%instring,%%pos,@pred(@sum(%%pos,@len(%S))))
else
%%newstring = %%newstring@substr(%%instring,1,@pred(@sum(%%pos,@len(%S))))
end
%%instring = @strdel(%%instring,1,@pred(@sum(%%pos,@len(%S))))
end
end
until @equal(%%pos,0)
%%newstring = %%newstring%%instring
list put,1,%%newstring
%%index = @succ(%%index)
until @equal(%%index,@count(1))
exit
:non-sense
%%index = 0
repeat
%%instring = @item(1,%%index)
%%newstring = ""
repeat
%%pos = @pos(%S,%%instring)
if @greater(%%pos,0)
if @equal(%%pos,1)
%%newstring = %%newstring%R
else
%%newstring = %%newstring@substr(%%instring,1,@pred(%%pos))%R
end
%%instring = @strdel(%%instring,1,@pred(@sum(%%pos,@len(%S))))
end
until @equal(%%pos,0)
%%newstring = %%newstring%%instring
list put,1,%%newstring
%%index = @succ(%%index)
until @equal(%%index,@count(1))
exit
|
_________________ ~~ Alcohol and calculus don't mix... Don't drink and derive! ~~
String.DLL * advanced string processing |
|