KFINDW 関数
文字列内の単語の文字位置か、文字列内の単語の番号を返します。
| カテゴリ: | CAS |
|---|---|
| 文字操作 | |
| 制限事項: | この関数にはI18Nレベル2のステータスが割り当てられ、DBCSデータ用に設計されています。ただし、最初の引数stringが1バイト文字の場合、KFINDW関数はSBCSデータを処理します。詳細については、SAS文字列関数の国際化の互換性を参照してください。 |
構文
必須引数
string
検索する文字列を指定する文字定数、変数または式です。
word
stringで検索する単語を指定する文字定数、変数または式です。
character-list
文字のリストを初期化する文字定数、変数または式です(省略可能)。
リスト中の文字は単語を区切るための区切り文字です(ただしmodifier引数にK修飾子を指定しない場合)。K修飾子を指定すると、このリストにないすべての文字が区切り文字となります。他の修飾子を使用して、このリストに文字をさらに追加できます。
start-position
検索を開始する位置を指定し、検索の方向を指定する整数値を持つ数値定数、変数または式です(省略可能)。
modifier
文字定数、変数または式を指定します。ここでは、空白以外の文字のそれぞれによってKFINDW関数のアクションが変更されます。
修飾子として次の文字を使用します。
| 空白 | 無視されます。 |
| aまたはA | 文字のリストに英文字が追加されます。 |
| bまたはB | stringが、左から右へではなく、右から左へスキャンされます。 |
| cまたはC | 文字のリストにコントロール文字が追加されます。 |
| dまたはD | 文字のリストに数字が追加されます。 |
| eまたはE | 文字列内の指定された単語の文字位置を決定するかわりに、指定された単語が見つかるまでスキャンされる単語を数えます。単語の断片は数えられません。 |
| fまたはF | 文字のリストにアンダースコアと英文字(VALIDVARNAME=V7を使用したSAS変数名内の有効な最初の文字)を追加します。 |
| gまたはG | 文字のリストにグラフィック文字が追加されます。グラフィカル文字は、紙面に印刷するとイメージになる文字です。 |
| hまたはH | 文字のリストに水平タブが追加されます。 |
| iまたはI | 大文字と小文字を区別しません。 |
| kまたはK | 文字のリストにないすべての文字が区切り文字として扱われます。Kを指定しなければ、文字のリストにあるすべての文字が区切り文字として扱われます。 |
| lまたはL | 文字のリストに小文字が追加されます。 |
| nまたはN | 文字のリストに数字、アンダースコアおよび英文字(VALIDVARNAME=V7を使用したSAS変数名内に表示可能な文字)を追加します。 |
| oまたはO | character-listおよびmodifier引数が、KFINDW関数を呼び出すたびにではなく、1回だけ処理されます。DATAステップ(WHERE句を除く)またはSQLプロシジャでO修飾子を使用すると、character-listおよびmodifier引数が変更されないため、KFINDW関数をループで呼び出す際により速く実行させられます。 |
| pまたはP | 文字のリストに句読点が追加されます。 |
| qまたはQ | 引用符で囲まれた部分文字列内にある区切り文字が無視されます。string引数の値に一致しない引用符が含まれている場合は、左から右へのスキャンによって、右から左へのスキャンとは異なる単語が生成されます。 |
| rまたはR | word引数から先頭および末尾の区切り文字を削除します。 |
| sまたはS | 文字のリストに空白文字(空白、水平タブ、垂直タブ、キャリッジリターン、ラインフィード、フォームフィード)を追加します。 |
| tまたはT | string、wordおよびcharacter-list引数から末尾の空白が削除されます。 |
| uまたはU | 文字のリストに大文字が追加されます。 |
| wまたはW | 文字のリストに印刷可能(書き込み可能)文字が追加されます。 |
| xまたはX | 文字のリストに16進数の文字が追加されます。 |
詳細
区切り文字
単語を区切るために使用されるいくつかの文字はいずれも区切り文字と呼ばれます。区切り文字は、character引数またはmodifier引数、あるいはその両方を使用して指定できます。Q修飾子を指定すると、引用符で囲まれた部分文字列内の文字は、区切り文字として扱われません。
単語
次の条件を両方とも満たす部分文字列を単語とします。
- 左境界が、区切り文字または文字列の先頭である
- 右境界が、区切り文字または文字列の末尾である。
注: 単語に区切り文字を含めることができます。この場合、KFINDW関数は、単語は区切り文字を含まないと定義されているSCAN関数とは異なります。
文字列の検索
指定された単語と一致し、かつ単語の定義を満たす部分文字列を見つけられなかった場合、KFINDW関数は0の値を返します。
KFINDW関数が、指定された単語と一致し、かつ単語の定義を満たす部分文字列を見つけた場合、KFINDW関数によって返される値は、E修飾子が指定されているかどうかによって異なります。
- E修飾子を指定すると、KFINDW関数は、指定された単語を検索している間にスキャンされた完全な単語の数を返します。start-positionで、単語の途中の位置が指定された場合、その単語は数に入りません。
- E修飾子を指定しなければ、KFINDW関数は、見つかった部分文字列の文字位置を返します。
start-position引数を指定すると、start-positionの絶対値によって、検索を開始する位置が指定されます。start-positionの符号によって、検索する方向が指定されます。
startposの値
アクション
0より大きい
start-positionから検索を開始し、右向きに検索していきます。start-positionが文字列の長さより大きい場合、KFINDW関数は0の値を返します。
0より小さい
位置start-positionから検索を開始し、左向きに検索していきます。start-positionが文字列の負の長さよりも小さい場合、文字列の末尾から検索を開始します。
0に等しい
KFINDW関数は0の値を返します。
start-position引数やB修飾子を指定しない場合、KFINDW関数は、文字列の先頭から開始して左から右へ検索します。B修飾子を指定しても、start-position引数を使用しない場合、KFINDW関数は、文字列の末尾から開始して右から左へ検索します。
ASCII環境でのKFINDW関数の使用
引数を2つだけ指定してKFINDW関数を使用し、コンピューターでASCII文字を使用している場合、次のデフォルトの区切り記号が使用されます。
空白 ! $ % & ( ) * + , - . / ; < ^¦/ ; < ^ |
^文字が含まれないASCII環境では、KFINDW関数はかわりに~文字を使用します。
null引数の使用
KFINDW関数では、文字引数をnullに指定できます。null引数は長さがゼロの文字列として扱われます。数値引数はnullにできません。
SBCSおよびDBCSデータの処理
KFINDW関数はSBCSデータを処理するように設計されていますが、特定の条件でDBCSデータを処理できます。SBCSおよびDBCS処理の基準は次のとおりです。
- stringがvarcharとして宣言され、かつマルチバイトデータを処理している場合、KFINDW関数はDBCSを処理します。
- stringがvarcharとして宣言されていないか、または1バイトデータを処理している場合、KFINDW関数はSBCSを処理します。
例
例1
これらの例では、UTF-8エンコーディングを使用します。
data _null_;
text='Renée Dupont';
pos_of=kfindw(text,'Dupont'); /*1*/
put pos_of=;
run;
-
KFINDWは、SBCSスペースを区切り文字として使用して、テキストDupontの位置を指定します。
上記のステートメントは、次の結果を生成します。
pos_of=7
例2
次に、サポート代理ペア文字のサポート方法の例を示します。HTML形式で表示されます。この例では絵文字を使用します。
data _null_;
text='Renée Dupont?😊';
pos_of=kfindw(text,'😊','','p'); /*1*/
put pos_of=;
run;
-
KFINDWは、SBCSスペースと句読点を区切り文字として使用して絵文字の位置を指定します。
上記のステートメントは、次の結果を生成します。
pos_of=14
例3
この例では、漢字を使用します。
data _null_;
text='SAS是全球最大的软件公司之一,sas 是全球商业智能和分析软件与服务领袖。';
pos_of=kfindw(text, 'sas', '', 'sp'); /*1*/
put pos_of = ;
run;
-
KFINDWは、スペースと句読点を区切り文字として使用して、sasの位置を指定します。
上記のステートメントは、次の結果を生成します。
pos_of=17