前のページ|次のページ

FINDW関数

文字列の単語の文字位置または文字列の単語の数を返します。

カテゴリ: 文字

構文

FINDW(string, word <, character(s)>)

必須引数

string

検索する文字列を指定する文字定数、変数または式です。

word

stringで検索する語を指定する文字定数、変数または式です。

character

文字のリストを初期化する文字定数、変数または式です(省略可能)。

リスト中の文字は単語を区切るための区切り文字です(ただしmodifier引数にK修飾子を指定しない場合)。K修飾子を指定すると、このリストにないすべての文字が区切り文字となります。他の修飾子を使用して、このリストに文字をさらに追加できます。

start-position

検索を開始する位置を指定し、検索の方向を指定する整数値を持つ数値定数、変数または式です(省略可能)。

modifier

文字定数、変数または式を指定します。空白でない文字はそれぞれFINDW関数のアクションを変更します。

ヒント
modifier引数を使用する場合、character引数の後に配置する必要があります。
次の文字を修飾子として使用できます。

空白

無視されます。

aまたはA

文字のリストにアルファベット文字を追加します。

bまたはB

start-position引数の符号に関係なく、左から右ではなく、右から左にスキャンします。

cまたはC

文字のリストに制御文字を追加します。

dまたはD

文字のリストに数字を追加します。

eまたはE

指定した単語の文字列の文字位置を決定するかわりに、指定した単語が検出されるまでにスキャンした単語を数えます。不完全な単語は数えられません。

fまたはF

アンダースコア文字および英文字(VALIDVARNAME=V7でSAS変数名の先頭に使用できる文字)を文字リストに追加します。

gまたはG

文字のリストにグラフィカル文字を追加します。

hまたはH

文字のリストに水平タブを追加します。

iまたはI

大文字か小文字かは無視します。

kまたはK

文字のリストに含まれていないすべての文字を区切り文字として扱うようにします。Kを指定しない場合、文字のリストに含まれているすべての文字が区切り文字として扱われます。

lまたはL

小文字を文字リストに追加します。

mまたはM

複数の連続する区切り文字、およびstring引数の先頭または末尾の区切り文字が、長さがゼロの単語を参照するように指定します。

nまたはN

数字、アンダースコアおよび英文字(VALIDVARNAME=V7でSAS変数名の先頭文字の次に使用できる文字)を文字リストに追加します。

oまたはO

character引数およびmodifier引数を1回だけ処理します。FINDW関数の呼び出し時毎には処理されません。DATAステップ(WHERE句を除く)またはSQLプロシジャでO修飾子を使用すると、character引数とmodifier引数が変更されないループ内でFINDWを呼び出すとき、より迅速に実行できます。

pまたはP

文字のリストに句読点を追加します。

qまたはQ

引用符で囲まれた部分文字列内の区切り文字を無視します。string引数の値に、対になっていない引用符が含まれている場合、左から右へのスキャンと、右から左へのスキャンとでは異なる単語が生成されます。

rまたはR

word引数から先頭および末尾の区切り文字を削除します。

sまたはS

文字リストに空白文字(空白、水平タブ、垂直タブ、キャリッジリターン、ラインフィード、フォームフィード)を追加します。

tまたはT

stringwordcharacter引数から末尾の空白を取り除きます。

uまたはU

大文字を文字リストに追加します。

wまたはW

印刷可能文字を文字リストに追加します。

xまたはX

文字のリストに16進文字を追加します。

詳細

"区切り文字"の定義

"区切り文字"とは、単語を区切るために使用される複数の文字のどれかです。character引数、modifier引数、またはその両方を使用して区切り文字を指定できます。Q修飾子を指定する場合、引用符で囲まれる部分文字列内の文字は区切り文字として扱われません。

"単語"の定義

"単語"は、次の両方の特性がある部分文字列です。
  • 左側にある区切り文字で区切られる部分文字列または文字列の最初の部分文字列
  • 右側にある区切り文字で区切られる部分文字列または文字列の最後の部分文字列
注: 単語には区切り文字を含めることができます。その場合、FINDW関数は、単語に区切り文字が含まれないSCAN関数とは異なります。

文字列の検索

FINDW関数は、指定した単語と単語の定義の両方を満たす部分文字列を検出できない場合、値0を返します。
指定した単語と単語の定義の両方を満たす部分文字列をFINDW関数が検出した場合に返される値は、E修飾子が指定されているどうかによって異なります。
  • E修飾子を指定すると、FINDWは、指定した単語の検索中にスキャンした完全な単語の数を返します。start-positionで単語内の位置を指定した場合、その単語は数には入りません。
  • E修飾子を指定しないと、FINDWは検出された部分文字列の文字位置を返します。
start-position引数を指定する場合、start-positionの絶対値で検索の開始位置を指定します。検索方向は、start-positionの符号で指定します。
startposの値
アクション
0より大きい
start-positionの位置から検索を開始して右方向に進みます。start-positionが文字列の長さよりも大きい場合、FINDWは値0を返します。
0より小さい
start-positionの位置から検索を開始して左方向に進みます。start-positionが文字列の負の長さよりも小さい場合、文字列の末尾から検索を開始します。
0
FINDWは値0を返します。
start-position引数やB修飾子を指定しない場合、FINDWは文字列の最初から開始して左から右に検索します。B修飾子は指定するが、start-position引数は使用しない場合、FINDWは文字列の最後から開始して右から左に検索します。

ASCIIおよびEBCDIC環境でのFINDW関数の使用

2つの引数のみを指定してFINDW関数を使用する場合、デフォルトの区切り文字は、コンピュータで使用している文字(ASCIIまたはEBCDIC)によって異なります。
  • お使いのコンピュータでASCII文字が使用されている場合、デフォルトの区切り文字は次のようになります。
    空白 !$ % & ( ) * + , - ./ ; < ^ |
    ^文字を含まないASCII環境の場合、FINDW関数はかわりに~文字を使用します。
  • お使いのコンピュータがEBCDIC文字を使用している場合、デフォルトの区切り文字は次のようになります。
    空白 !$ % & ( ) * + , - ./ ; < ¬ | ¢

NULL引数の使用

FINDW関数では、文字引数をNULLに指定できます。ヌル引数は長さがゼロの文字列として扱われます。数値引数はヌルにできません。

例1: 文字列からの単語の検索

次の例では、文字列から単語"she"を検索し、単語の開始位置を返します。
data _null_;    
   whereisshe=findw('She sells sea shells? Yes, she does.', 'she');    
   put whereisshe=; 
run;
次の出力がログに書き込まれます。
whereisshe=28

例2: Character引数およびStart-position引数を使用した文字列の検索

次の例では、単語"rain"が2回現れます。FINDWは、25番目の位置から検索を開始するため、2番目の単語のみが検出されます。character引数では、区切り文字として空白文字が指定されています。
data _null_;
   result=findw('At least 2.5 meters of rain falls in a rain forest.', 
                   'rain', ' ', 25);
   put result=;
run;
次の出力がログに書き込まれます。
result=40

例3: I修飾子およびStart-position引数を使用した文字列の検索

次の例では、I修飾子を使用して単語の開始位置を返します。I修飾子を使用すると大文字と小文字が区別されなくなります。start-position引数では検索の開始位置を指定します。
data _null_;
   string='Artists from around the country display their art at 
           an art festival.';
   result=findw(string, 'Art', ' ', 'i', 10);
   put result=;
run;
次の出力がログに書き込まれます。
result=47

例4: E修飾子を使用した文字列の検索

次の例では、E修飾子を使用して、単語"art"の検索中にスキャンされた完全な単語の数を返します。
data _null_;
   string='Artists from around the country display their art at 
           an art festival.';
   result=findw(string, 'art', ' ', 'E');
   put result=;
run;
次の出力がログに書き込まれます。
result=8

例5: E修飾子およびStart-position引数を使用した文字列の検索

次の例では、E修飾子を使用して文字列の単語を数えます。単語のカウントを文字列の50番目の位置から開始します。"art"は50番目の文字位置から3番目の単語であるため、結果は3になります。
data _null_;
   string='Artists from around the country display their art at 
           an art festival.';
   result=findw(string, 'art', ' ', 'E', 50);
   put result=;
run;
次の出力がログに書き込まれます。
result=3

例6: 2つの修飾子を使用した文字列の検索

次の例では、IおよびE修飾子を使用して、文字列の単語を検出します。
data _null_;
   string='The Great Himalayan National Park was created in 1984. Because
           of its terrain and altitude, the park supports a diversity 
           of wildlife and vegetation.';
   result=findw(string, 'park', ' ', 'I E');
   put result=;
run;
次の出力がログに書き込まれます。
result=5

例7: R修飾子を使用した文字列の検索

次の例では、R修飾子を使用して、単語から先頭および末尾の区切り文字を削除します。
data _null_; 
    string='Artists from around the country display their art at 
               an art festival.'; 
    word='  art  ';
    result=findw(string, word, ' ', 'R'); 
    put result=; 
run; 
次の出力がログに書き込まれます。
result=47

関連項目:

CALLルーチン:
前のページ|次のページ|ページの先頭へ