
简单的查找和替换
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;
请注意如何从 positionA 之后的一个字符开始找到 positionB。否则会再次找到位置 A 处的第一个逗号。如果搜索失败,包含返回位置 0,使得如果(包含(...),... )工作得很好。
子字符串- 字符串的一部分,从一个位置开始,一段长度。
state = Substr( place, 1 + positionA, positionB - (1 + positionA) );
“ 北卡罗来纳”
注意第一个逗号后的空格也被捕获了。如果省略 length 参数,则 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 函数一起使用,但是当您解释从长度中减去位置时,它会更复杂。
芒格- 万事通...
芒格一起寻找和替换。它不像 Regex 那样聪明或广为人知,但一旦掌握了它,就更容易理解。如果没有手册,其他人将无法弄清楚您的 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, ?) |
“出租车” |
“ab$*?” |
| |
|
|
| 芒格("abcabc", 3, "b", ?) |
5 |
“abca$*?c” |
| 芒格("abcabc", 3, "Q", ?) |
0 |
"abcabc" |
| 芒格("abcabc", 3, "", ?) |
0 |
"abcabc" |
如果你盯着它看够久,所有的结果都是有用以一种自洽的方式。如果没有要查找的文本,只有一个长度,Munger 将返回子字符串。如果有替换文本,则返回替换了子字符串的原始文本。但如果有文本要查找,则没有理由返回找到的文本,因此如果没有替换文本,您将获得找到的文本的位置。如果有替换文本,您将获得替换了子字符串的原始字符串。奇数情况是最后一行,它可能满足也可能不满足您查找空字符串的期望。也不要使用负的位置和长度。他们不会在这里增加任何清晰度,也不会像 substr() 那样工作。
例子
数据表列公式可以计算另一列的值。这是一个“姓,名”示例,假设逗号是唯一的分隔符。此示例适用于“onlyname”情况,因为 Left 将任何超出范围的长度解释为所有内容的方式。查找 Regex 帖子,您可能更喜欢它。
使用 Left() 和 Contains() 的列公式
使用 substr() 和 contains() 的列公式
2017 年 9 月 30 日编辑: 修复格式
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />写得真好!我发现 JSL 中的字符/字符串处理函数对各种项目都非常有用。