|
|
|
Joined: Jan 2009
Posts: 19
Ameglian cow
|
OP
Ameglian cow
Joined: Jan 2009
Posts: 19 |
Here is an alias that allows you to replace the n'th occurence of the specified substring in the specified string with a token. IE: $replaceTok(this @ is @ a @ test, @, -1, --) = this @ is @ a -- test alias replacetok {
var %pos $pos($1,$2,$iif($3 > 0,$3,$calc($pos($1,$2,0) + $3 + 1)))
return $+($left($1,$calc(%pos - 1)),$$4,$right($1,- $+ $calc(%pos + $len($2) - 1)))
} Feel free to fork/optimize the code!
|
|
|
|
Joined: Jan 2009
Posts: 19
Ameglian cow
|
OP
Ameglian cow
Joined: Jan 2009
Posts: 19 |
$replaceTok(this @ is @ a @ test, @, -1, ---,-,-1,^) = this @ is @ a --^test $replaceTok(this @ is @ a @ test, @, -1, ---,-,-2,^) = this @ is @ a -^- test $replaceTok(this @ is @ a @ test, @, -1, ---,-,1,^) = this @ is @ a ^-- test $replaceTok(this @ is @ a @ test, @, -2, ---,-,-2,^) = this @ is -^- a @ test alias replacetok {
var %string $1
var %count 2
while %count < $0 {
var %replaceText [ $ $+ [ %count ] ]
inc %count
var %max $pos(%string,%replaceText, 0)
var %token $parseRange([ $ $+ [ %count ] ], %max)
inc %count
var %startTok $token(%token,1,32)
var %endTok $token(%token,2,32) + 1
var %text [ $ $+ [ %count ] ]
inc %count
var %tokensReplaced 0
while %startTok < %endTok {
var %pos $pos(%string,%replaceText,$calc(%startTok - %tokensReplaced))
var %string $+($left(%string,$calc(%pos - 1)),%text,$right(%string,- $+ $calc(%pos + $len(%replaceText) - 1)))
inc %startTok
inc %tokensReplaced
}
}
return %string
}
alias -l parserange {
var %input $1
var %maxRange $2
var %startNumber, %endNumber,%c $token(%input,1,45)
;if the first character is a -, the first parameter is a negative number; proceed to second - or end of the string
if ($left(%input,1) == -) {
var %startNumber $calc(%maxRange - %c + 1)
var %input $right(%input,-1)
}
else {
var %startNumber %c
}
var %a $pos(%input,-,1)
if %a == $len(%input) {
;second - as at end of string (range encountered) no second integer
%endNumber = %maxRange
}
else if !%a {
;no - after the first token; no range
%endNumber = %startNumber
}
else {
;range encountered; second number present
;proceed to first - or end of string, and if there is a positive or negative integer
var %a $iif($Pos(%input,-,1),$v1,0)
var %b $iif($pos(%input,-,2),$v1,0)
var %c $token(%input,2,45)
if %b > 0 && $calc(%b - %a) == 1 {
;second integer is negative,
var %endNumber $calc(%maxRange - %c + 1)
}
else if %b == 0 {
;second integer is positive
var %endnumber %c
}
else {
;unknown condition
var %endnumber %c
}
}
return %startNumber %endNumber
}
Last edited by Imk0tter; 09/05/21 04:07 PM.
|
|
|
|
|
|
|
|