
簡單的尋找和替換
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";
連接到它自己。