
简单的查找和替换
JMP 的脚本语言 JSL 可以在变量中存储数字、字符串和其他对象。 字符串赋值可能如下所示:
place = "Cary, North Carolina, USA";
变量地方现在持有字符串。 下面是一组用于在 JSL 中处理字符串的函数。地方将在所有示例中保留相同的字符串。 正则表达式和模式匹配将在后面的文章中介绍。
级联- 将两根弦首尾相连。 或者两个以上...
sentence = "My home is " || place || ".";
“我的家是美国北卡罗来纳州卡里。”
长度- 字符串中有多少个字符?
Write( place, " ", Length( place ) );
卡里, 北卡罗来纳州, 美国 25
包含- 字符串的哪一部分包含此文本?
positionA = Contains( place, "," );
positionB = Contains( place, ",", 1 + positionA );
Show( positionA, positionB );
位置A = 5;
位置B = 21;
请注意如何在位置 A 之后的一个字符处找到位置 B。 否则会再次找到A位置的第一个逗号。 如果搜索失败,Contains 返回位置 0,使得如果(包含(...),...)工作顺利。
子字符串- 字符串的一部分,从某个位置开始,长度。
state = Substr( place, 1 + positionA, positionB - (1 + positionA) );
“ 北卡罗来纳”
请注意第一个逗号后的空格也被捕获。 如果省略长度参数,则 substr 会到达末尾。 对于负起始位置还有一个规则:
Substr( place, -3, 2 );
“我们”
-3表示从末尾开始3个字符。
修剪- 删除那些讨厌的空白
state = trim( state, "left" ); // or "right" or "both"
“北卡罗来纳”
左边- 字符串左(前)端的一些字符
Left( place, positionA - 1 );
“卡里”
positionA为5,第一个逗号的位置; “Cary”是逗号之前的 4 个字符。 填充文本还有第三个参数:
Left( "abc", 15, "@#$*" );<BR />
“abc@#$*@#$*@#$*”
请注意如何添加足够的填充文本来提供“abc”左侧所需的 15 个字符。 空间可能是更好的填充选择。 如果没有填充符,结果只是“abc”。
正确的- 从字符串右(后)端算起的一些字符
Right( place, 3 ); // like Left, there is a fill option
“美国”
如果你有位置,请使用 Substr 而不是 right
Substr( place, positionB + 2 ); // +2 goes past the comma and the space
“美国”
Substr 不需要第三个长度值;它会走到最后。
你可以将 Right 与位置和 Length 函数一起使用,但是当您解释如何从长度中减去位置时,它会变得更加复杂。
芒格- 万事通...
芒格一起进行搜索和替换。 它不像正则表达式那样聪明或众所周知,但一旦掌握了它的窍门,它就更容易理解。 如果没有手册,其他人将无法弄清楚您的 JSL 正在做什么,因此您可能想跳过它。
result = Munger( source, startPosition, textOrLength, optionalReplacementText );
下面的表格试图解释 textOrLength 和 optionalReplacementText 的各种组合。 所有示例都使用 3 作为起始位置,跳过最初的“ab”。 请注意第四个示例查找第二个“b”。
| |
没有替代品 |
替换文本 =“$*?” |
| 芒格(“abcabc”, 3, 2, ?) |
“ca” |
“ab$*?bc” |
| 芒格(“abcabc”, 3, 0, ?) |
”” |
“ab$*?cabc” |
| 芒格(“abcabc”, 3, 99, ?) |
“cabc” |
“ab$*?” |
| |
|
|
| 芒格(“abcabc”, 3, “b”, ?) |
5 |
“abca$*?c” |
| 芒格(“abcabc”, 3, “Q”, ?) |
0 |
“abcabc” |
| 芒格(“abcabc”, 3, “”, ?) |
0 |
“abcabc” |
如果你凝视它足够长的时间,所有的结果都是有用以一种自洽的方式。 如果没有要查找的文本,只有长度,芒格将返回子字符串。 如果有替换文本,则返回替换了子字符串的原始文本。但是,如果有文本要查找,则没有理由返回找到的文本,因此如果没有替换文本,您将获得找到的文本的位置。 如果存在替换文本,您将获得替换了子字符串的原始字符串。奇怪的情况是最后一行,这可能会也可能不会满足您查找空字符串的期望。 也不要使用负位置和长度。 它们不会在这里增加任何清晰度,并且不像 substr() 那样工作。
例子
数据表列公式可以计算另一列的值。 这是一个“姓氏,名字”示例,假设逗号是唯一的分隔符。 此示例适用于“onlyname”情况,因为 Left 将任何超出范围的长度解释为所有内容。 查找 Regex 帖子,您可能会更喜欢它。
Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()使用 Left() 和 Contains() 的列公式
Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()使用 substr() 和 contains() 的列公式
编辑2017年9月30日:修复格式
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />写得很好! 我发现 JSL 中的字符/字符串处理函数对于各种项目都非常有用。
小补充:
你可以写
string = "old text";<BR />string = string || " new text";
作为
string = "old text";<BR />string ||= " new text";
与它自身连接。