前のページ|次のページ

INDEXW関数

文字式から単語として指定した文字列を検索し、単語の最初の文字の位置を返します。

カテゴリ: 文字
制限事項: この関数は、I18Nレベル0準拠しており、SBCSデータ向けに設計されています。この関数をDBCSまたはMBCSデータの処理に使用しないでください。

構文

INDEXW(source, excerpt <, delimiters>)

必須引数

source

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

excerpt

sourceで検索する文字定数、変数または式を指定します。SASは、excerptから先頭および末尾の区切り文字を削除します。

オプション引数

delimiter

INDEXWが文字列の区切り文字として使用する文字を含む文字定数、変数または式を指定します。デフォルトの区切り文字は空白文字です。

詳細

INDEXW関数は、sourceを左から右へ、excerptが最初に現れる個所を検索し、source内での部分文字列の最初の文字の位置を返します。source内に部分文字列が見つからない場合、INDEXWは値0を返します。文字列が複数回現れる場合、INDEXWは、最初の出現個所の位置のみを返します。
部分文字列パターンは、単語の境界で開始および終了する必要があります。INDEXWの場合、単語の境界は区切り文字、sourceの最初およびsourceの最後になります。代替区切り文字を使用する場合、INDEXWはテキストの最後を終了データとして認識しません。
第2引数に空白が含まれている場合や長さが0の場合、INDEXWは次のように動作します。
  • sourceexcerptの両方に空白のみが含まれている場合や長さが0の場合、INDEXWは値1を返します。
  • excerptに空白のみが含まれている場合や長さが0の場合、sourceに文字または数値のデータが含まれていると、INDEXWは値0を返します。

比較

INDEXW関数は、単語の文字列を検索しますが、INDEX関数は区切られた単語または他の単語の一部としてパターンを検索します。INDEXCは、excerpt内に含まれる文字を検索します。FINDW関数には、さらに多くのオプションがあります。

例1: SASの例の表

SASステートメントとその結果を次に示します。
SASステートメント
結果
s='asdf adog dog';
p='dog  ';
x=indexw(s, p);
put x;
 
11
s='abcdef x=y';
p='def';
x=indexw(s, p);
put x;
 
0
x="abc,def@ xyz";
abc=indexw(x, " abc ", "@");
put abc;
 
0
x="abc,def@ xyz";
comma=indexw(x, ",", "@");
put comma;
 
0
x='abc,def% xyz';
def=indexw(x, 'def', '%,');
put def;
 
5
x="abc,def@ xyz";
at=indexw(x, "@", "@");
put at;
 
0
x="abc,def@ xyz";
xyz=indexw(x, " xyz", "@");
put xyz;
 
9
c=indexw(trimn(' '), '        ');
1
g=indexw('  x  y  ', trimn(' '));
0

例2: 区切り文字としてセミコロン(;)を使用する

次の例では、SASプログラムでどのようにセミコロン区切り文字が使用されるのかを示します。このプログラムでは、CATX関数も呼び出されます。CATXの各呼び出しの後で適切な位置にセミコロン区切り文字を配置し、INDEXW関数の第2引数から空白を削除する必要があります。これを行わないと、検索は成功しません。
data temp;
   infile datalines;
   input name $12.;
   datalines;
abcdef
abcdef
;
run;
data temp2;
   set temp;
   format name_list $1024.;
   retain name_list ' ';
   exists=indexw(name_list, trim(name), ';');
   if exists=0 then do
      name_list=catx(';', name_list, name)||';' ;
	  name_count +1;
      put '-------------------------------';
      put exists= ;
      put name_list= ;
      put name_count= ; 
	  end;
	run;
次の出力がログに書き込まれます。
------------------------------- exists=0 name_list=abcdef; name_count=1
この例では、CATXが最初に呼び出されるときにname_listが空白で、nameの値が'abcdef'になっています。CATXは、セミコロンを追加せずに'abcdef'を返します。ただし、INDEXWが2回目に呼び出される場合、name_listの値は'abcdef'と1018 (1024–6)個の空白、nameの値は'abcdef'と6個の空白になります。INDEXWの第3引数はセミコロン(;)であるため、空白は有効となり、単語の境界を表しません。そのため、第1引数で第2引数は見つかりません。
例に空白がなければ、INDEXWの動作がわかりやすくなります。次の例では、第1引数に完全な単語ABCDEが見つからないため、xの値として0が想定されます。
x=indexw('ABCDEF;XYZ', 'ABCDE', ';');
ゼロ以外の結果を返す第2引数の値はABCDEFとXYZだけです。

例3: 区切り文字として空白を使用する

次の例では、区切り文字として空白を使用します。
data temp;
   infile datalines;
   input name $12.;
   datalines;
abcdef
abcdef
;
run;
data temp2;
   set temp;
   format name_list $1024.;
   retain name_list ' ';
   exists=indexw(name_list, name, ' ');
   if exists=0 then do
      name_list=catx(' ', name_list, name) ;
	  name_count +1;
      put '-------------------------------';
      put exists= ;
      put name_list= ;
      put name_count= ; 
	  end;
run;
次の出力がログに書き込まれます。
------------------------------- exists=0 name_list=abcdef name_count=1

関連項目:

前のページ|次のページ|ページの先頭へ