等しくないサイズの文字列から数値を抽出する数字が埋め込まれた文字列の列があります。 これらの文字列に探している正しいテキストが含まれているかどうかを判断する方法は知っていますが、これらのそれぞれの後に続く値を抽出する方法はわかりません。 文字列のサイズが同じであれば、場所に基づいてmunger関数を使用できますが、文字列のサイズが一貫していないため、これを行うことはできません。
例:「修正はabcde +0.2です。ここには、fghij-1のテキストがあります。」
「abcde」と「fghij」をクエリして、文字列が表示された直後のスペースにそれぞれ+0.2と-1の値を抽出したいと思います。 通常、スペースの後に+/-と数字が続きます(上記のように、整数と小数点以下1桁まで)。
Re:サイズが異なる文字列から数値を抽出するさらに別の方法-単語関数を試してください。これは列式です:
look_for = {"abcde", "fghij", "klmno"};
wlist = Words( :Column 1, " " );
one_num = .;
For( i = 1, i <= N Items( look_for ), i++,
one_word = look_for[i];
f = Contains( wlist, one_word );
If( f,
one_num = Num( wlist[f + 1] );
Break();
);
);
one_num;Re:サイズが異なる文字列から数値を抽出するまた、使用することができます正規表現()列数式で正規表現を使用して関数を作成します。 あなたが与えた例がすべての可能な条件を示していない場合、そのアプローチは役立つかもしれません。 これは、アイデアを説明するためのスクリプトです。
Names Default to Here( 1 );
text = "The fix in is abcde +0.2, there is more text here fghij -1.";
answer 1 = Num( Regex( text, ".*abcde ([-+]?\d?.?\d?)", "\1" ) );
answer 2 = Num( Regex( text, ".*fghij ([-+]?\d?.?\d?)", "\1" ) );
The文章スクリプトの変数は、列数式の現在の行を表します。 The回答1最初の新しい結果列の同じ行の結果になります。 数式の等号の右側にある式を使用します。
この例は単純です。 テキストの性質や数字の序文がもっと複雑な場合は、拡張して洗練する必要があります。
文字列の照合、戻り、置換のためのJMPパターンもあります。
Re:サイズが異なる文字列から数値を抽出するWord()関数をチェックしてください。あなたが与えた例を考えると、空白を見つけることに基づいて、文字列の2番目の単語を簡単に探すことができます
Word(2、<文字列列>、 "")
また
contains()を使用して「+」または「-」を検索し、そこから文字列をsubstr()して数値を取得できます。
以下のデータ表を添付します
