
シンプルな検索と置換
JMP のスクリプト言語である JSL は、数値、文字列、およびその他のオブジェクトを変数に格納できます。 文字列の割り当ては次のようになります。
place = "Cary, North Carolina, USA";
変数場所文字列を保持するようになりました。 JSL で文字列を操作するための関数のセットを次に示します。場所すべての例で同じ文字列が保持されます。 正規表現とパターン マッチングについては、後の投稿で説明します。
連結- 2 本の文字列を端から端までつなぎます。 それとも二人以上か…
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 の 1 文字後から位置 B がどのように検索されるかに注目してください。 それ以外の場合は、positionA の最初のコンマが再度検出されます。 検索が失敗した場合、Contains は位置 0 を返します。 if( を含む(...), ... )うまく働きます。
サブ文字列- ある位置から始まる、一定の長さの文字列の一部。
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 文字です。 フィラーテキストには 3 番目の引数があります。
Left( "abc", 15, "@#$*" );<BR />
「abc@#$*@#$*@#$*」
「abc」の左から要求された 15 文字を提供するのに十分なフィラー テキストがどのように追加されているかに注目してください。 スペースを埋めるのがより良い選択かもしれません。 フィラーがなければ、結果は単なる「abc」になります。
右- 文字列の右端 (後端) からのいくつかの文字
Right( place, 3 ); // like Left, there is a fill option
"アメリカ合衆国"
ポジションがある場合は、right の代わりに Substr を使用してください
Substr( place, positionB + 2 ); // +2 goes past the comma and the space
"アメリカ合衆国"
Substr には長さの 3 番目の値は必要ありません。それは最後まで行きます。
あなたできたRight を位置と Length 関数で使用しますが、長さから位置を減算する方法を説明した頃には、さらに複雑になります。
マンガー- 何でも屋...
Munger は検索と置換をまとめて行います。 これは Regex ほど賢くなく、よく知られていませんが、コツを掴めば理解するのが簡単です。 マニュアルがなければあなたの JSL が何をしているのか他の誰も理解できないので、マニュアルをスキップした方がよいでしょう。
result = Munger( source, startPosition, textOrLength, optionalReplacementText );
以下の表は、textOrLength とOptionalReplacementText のさまざまな組み合わせを説明したものです。 すべての例では、開始位置として 3 を使用し、最初の「ab」をスキップします。 4 番目の例で 2 番目の「b」を検索していることに注目してください。
| |
代替品なし |
置換テキスト = "$*?" |
| Munger("abcabc", 3, 2, ? ) |
「カ」 |
「ab$*?bc」 |
| Munger("abcabc", 3, 0, ?) |
「」 |
「ab$*?cabc」 |
| Munger("abcabc", 3, 99, ?) |
「キャブ」 |
「アブドル*?」 |
| |
|
|
| Munger("abcabc", 3, "b", ?) |
5 |
「abca$*?c」 |
| Munger("abcabc", 3, "Q", ?) |
0 |
「abcabc」 |
| Munger("abcabc", 3, "", ?) |
0 |
「abcabc」 |
十分に長く見つめていれば、結果はすべて役に立つ自己一貫した方法で。 検索するテキストがなく、長さだけがある場合、Munger は部分文字列を返します。 置換テキストがある場合は、部分文字列が置換された元のテキストが返されます。ただし、検索するテキストがある場合は、見つかったテキストを返す理由がないため、置換テキストがない場合は、見つかったテキストの位置を取得します。 置換テキストがある場合は、部分文字列が置換された元の文字列が取得されます。奇妙なケースは最後の行であり、空の文字列を見つけるという期待を満たす場合とそうでない場合があります。 負の位置や長さも使用しないでください。 これらはここでは明確になりませんし、substr() のようには機能しません。
例
データ テーブルの列の式では、別の列から値を計算できます。 以下は、カンマが一意の区切り文字であると仮定した「姓、名」の例です。 この例は、Left が範囲外の長さをすべてとして解釈するため、「onlyname」の場合に機能します。 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 日: フォーマットの修復
ちょっとした追加:
あなたは書ける
string = "old text";<BR />string = string || " new text";
として
string = "old text";<BR />string ||= " new text";
それ自体に連結します。