前のページ|次のページ

FINDC関数

文字のリストにある文字を文字列から検索します。

カテゴリ: 文字
制限事項: この関数は、I18Nレベル0準拠しており、SBCSデータ向けに設計されています。この関数をDBCSまたはMBCSデータの処理に使用しないでください。
ヒント: かわりにKINDEXC 関数 (SAS各国語サポート(NLS):リファレンスガイド)を使用してエンコーディングの非依存コードを書き込みます。

構文

必須引数

string

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

ヒント 文字のリテラル文字列を引用符で囲みます。

character-list

文字リストを初期化する定数、変数または文字式です。modifier引数でK修飾子を指定しないと、FINDCはこのリストの文字を検索します。K修飾子を指定すると、FINDCはこの文字のリストにないすべての文字を検索します。他の修飾子を使うことでリストに文字をさらに追加できます。

modifier

文字定数、変数または式です。これらの各文字でFINDC関数のアクションを変更します。修飾子として使用できる文字(大文字または小文字)は次のとおりです。

空白

無視されます。

aまたはA

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

bまたはB

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

cまたはC

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

dまたはD

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

fまたはF

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

gまたはG

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

hまたはH

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

iまたはI

検索時に大文字と小文字を区別しません。

kまたはK

文字のリストにない文字を検索します。この修飾子を指定しないと、FINDCは文字のリストにある文字を検索します。この修飾子は、vまたはV修飾子と同じ機能を持っています。

lまたはL

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

nまたはN

文字のリストに数字、アンダースコアおよび英文字(VALIDVARNAME=V7を使用したSAS変数名内に表示可能な文字)を追加します。

oまたはO

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

pまたはP

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

sまたはS

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

tまたはT

string引数とcharacter-list引数から末尾の空白を取り除きます。

注: 両方(またはすべて)の文字引数ではなく一方のみから末尾の空白を削除する場合は、FINDC関数にT修飾子を使用するかわりに、TRIM関数を使用します。

uまたはU

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

vまたはV

文字のリストにない文字を検索します。この修飾子を指定しないと、FINDCは文字のリストにある文字を検索します。この修飾子は、kまたはK修飾子と同じ機能を持っています。

wまたはW

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

xまたはX

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

ヒント modifierが定数の場合、引用符で囲みます。一組の引用符で複数の定数を指定します。modifierを変数または式として表すこともできます。

オプション引数

start-position

検索を開始する位置を指定し、検索の方向を指定する整数値を持つ任意の数値定数、変数または式です。

詳細

FINDC関数はstringで最初に出現する指定の文字を検索し、最初に検出された文字の位置を返します。string内に文字が見つからない場合、FINDCは値0を返します。
FINDC関数では、文字引数をNULLに指定できます。NULL引数は、長さがゼロの文字列として扱われます。数値引数はNULLにできません。
start-positionを指定しないと、FINDCは、B修飾子を使用している場合は文字列の最後から、B修飾子を使用していない場合は文字列の最初から検索を開始します。
start-positionを指定すると、start-positionの絶対値で検索の開始位置が決定されます。B修飾子を使用する場合、検索は常に右から左に進みます。B修飾子を使用しない場合、start-positionの符号で検索方向を指定します。次の表に、検索方向の要約を示します。
startposの値
アクション
0より大きい
start-positionの位置から検索を開始して右方向に進みます。start-positionが文字列の長さよりも大きい場合、FINDCは値0を返します。
0より小さい
start-positionの位置から検索を開始して左方向に進みます。start-positionが文字列の負の長さよりも小さい場合、文字列の末尾から検索を開始します。
0
値0を返します。

比較

  • FINDC関数は文字列の個々の文字を検索しますが、FIND関数は文字列の文字の部分文字列を検索します。
  • FINDC関数とINDEXC関数はどちらも文字列の個々の文字を検索します。ただし、INDEXC関数にはmodifier引数もstart-position引数もありません。
  • FINDC関数は文字列の個々の文字を検索しますが、VERIFY関数は式に固有の最初の文字を検索します。VERIFY関数にはmodifier引数もstart-position引数もありません。

例1: 文字列の文字の検索

この例では、文字列を検索して、検出された文字を返します。
data _null_;
   string='Hi, ho!';
   charlist='hi';
   j=0;
   do until (j=0);
      j=findc(string, charlist, j+1);
      if j=0 then put +3 "That's all";
      else do;
         c=substr(string, j, 1);
         put +3 j= c=;
      end;
   end;
run;
次の出力がログに書き込まれます。
   j=2 c=i j=5 c=h That's all

例2: 文字列の文字の検索(大文字と小文字を区別しない)

この例では、文字列を検索して、検出された文字を返します。I修飾子を使用して、文字の大文字と小文字を区別しないようにします。
data _null_;
   string='Hi, ho!';
   charlist='ho';
   j=0;
   do until (j=0);
      j=findc(string, charlist, j+1, "i");
      if j=0 then put +3 "That's all";
      else do;
         c=substr(string, j, 1);
         put +3 j= c=;
      end;
   end;
run;
次の出力がログに書き込まれます。
   j=1 c=H j=5 c=h j=6 c=o That's all

例3: K修飾子を使用した文字の検索

この例では、文字列を検索して、文字リストにない文字を返します。
data _null_;
   string='Hi, ho!';
   charlist='hi';
   j=0;
   do until (j=0);
      j=findc(string, charlist, "k", j+1);
      if j=0 then put +3 "That's all";
      else do;
         c=substr(string, j, 1);
         put +3 j= c=;
      end;
   end;
run;
次の出力がログに書き込まれます。
   j=1 c=H j=3 c=, j=4 c= j=6 c=o j=7 c=!That's all

例4: h、iおよび空白文字の検索

この例では、3つの文字(h、iおよび空白文字)を検索します。文字hおよびiは小文字です。この検索では、大文字のHおよびIは無視されます。
data _null_;
   whereishi=0;
   do until(whereishi=0);
      whereishi=findc('Hi there, Ian!', 'hi ', whereishi+1);
      if whereishi=0 then put “The End”;
      else do;
         whatfound=substr('Hi there, Ian!', whereishi,1);
         put whereishi= whatfound=;
      end;
   end;
run;
次の出力がログに書き込まれます。
whereishi=2 whatfound=i whereishi=3 whatfound= whereishi=5 whatfound=h whereishi=10 whatfound= The End

例5: 文字hおよびiの検索(大文字と小文字を区別しない)

この例では、4つの文字(h、i、H、I)を検索します。i修飾子を指定すると、FINDCは検索時に大文字と小文字を区別しません。
data _null_;
   whereishi_i=0;
   do until(whereishi_i=0);
      variable1='Hi there, Ian!';
      variable2='hi';
      variable3='i';
      whereishi_i=findc(variable1, variable2, variable3, whereishi_i+1);
      if whereishi_i=0 then put "The End";
      else do;
         whatfound=substr(variable1, whereishi_i, 1);
         put whereishi_i= whatfound=;
      end;
   end;
run;
次の出力がログに書き込まれます。
whereishi_i=1 whatfound=H whereishi_i=2 whatfound=i whereishi_i=5 whatfound=h whereishi_i=11 whatfound=I The End

例6: 文字hおよびiの検索(末尾の空白を削除)

この例では、2つの文字(hおよびi)を検索します。t修飾子を指定すると、FINDCは文字列引数および文字引数から末尾の空白を削除します。
data _null_;
   whereishi_t=0;
   do until(whereishi_t=0);
      expression1='Hi there, '||'Ian!';
      expression2=kscan('bye or hi', 3)||'  ';
      expression3=trim('t   ');
      whereishi_t=findc(expression1, expression2, expression3, whereishi_t+1);
      if whereishi_t=0 then put "The End";
      else do;
         whatfound=substr(expression1, whereishi_t,1);
         put whereishi_t= whatfound=;
      end;
   end;
run;
次の出力がログに書き込まれます。
whereishi_t=2 whatfound=i whereishi_t=5 whatfound=h The End

例7: h、i、H、Iを除くすべての文字の検索

この例では、文字列のh、i、H、Iを除くすべての文字を検索します。v修飾子を指定すると、FINDCは文字引数にない文字のみを数えます。この例にはi修飾子もあるため、検索時に大文字と小文字は区別されません。
data _null_;
   whereishi_iv=0;
   do until(whereishi_iv=0);
      xyz='Hi there, Ian!';
      whereishi_iv=findc(xyz, 'hi', whereishi_iv+1, 'iv');
      if whereishi_iv=0 then put "The End";
      else do;
         whatfound=substr(xyz, whereishi_iv,1);
         put whereishi_iv= whatfound=;
      end;
   end;
run;
次の出力がログに書き込まれます。
whereishi_iv=3 whatfound= whereishi_iv=4 whatfound=t whereishi_iv=6 whatfound=e whereishi_iv=7 whatfound=r whereishi_iv=8 whatfound=e whereishi_iv=9 whatfound=, whereishi_iv=10 whatfound= whereishi_iv=12 whatfound=a whereishi_iv=13 whatfound=n whereishi_iv=14 whatfound=!The End

関連項目:

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