06.05.2012, 17:58
strDelete(szStr[], ...) ─ Deletes sub-strings from a string in a very neat and fast way:
Example:
pawn Код:
stock strDelete(szStr[], ...) {
new
iStart,
iAddr,
iLen,
iPos
;
#emit ADDR.PRI szStr
#emit ADD.C 4
#emit STOR.S.PRI iStart
for(new iEnd = iStart + ((numargs() - 1) << 2); iEnd != iStart; iStart += 4) {
#emit LOAD.S.PRI iStart
#emit LOAD.I
#emit STOR.S.PRI iAddr
#emit PUSH.S iAddr
#emit PUSH.C 4
#emit SYSREQ.C strlen
#emit INC.PRI
#emit STOR.S.PRI iLen
#emit STACK 8
LOOP:
#emit PUSH.C 0
#emit PUSH.C true
#emit PUSH.S iAddr
#emit PUSH.ADR szStr
#emit PUSH.C 16
#emit SYSREQ.C strfind
#emit STACK 20
#emit STOR.S.PRI iPos
if(iPos != -1) {
#emit LOAD.S.PRI iPos
#emit LOAD.S.ALT iLen
#emit ADD
#emit DEC.PRI
#emit PUSH.PRI
#emit PUSH.S iPos
#emit PUSH.ADR szStr
#emit PUSH.C 12
#emit SYSREQ.C strdel
#emit STACK 16
#emit JUMP LOOP
}
}
return 1;
}
pawn Код:
new string[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
strDelete(string, "ipsum", "sit", ",", "consectetur", "elit");
print(string); // Prints: "Lorem dolor amet adipiscing ."