文字列中の位置の検索
FIND命令は、1番目の入力文字列内に、2番目の入力文字列があるかどうかを検索して、その位置を返します。演算結果は、出力変数に書き込まれます。1番目の入力文字列内に、2番目の入力文字列がなければ、値"0"を返します。
入力
入力文字列
入力文字列内で検索する文字列(大文字小文字の区別あり)
出力
値が0より大きい場合:検索して見つかった文字列の位置(1は最初の文字を表す)
値が0の場合:検索文字列が見つからない
この命令をUTF-8文字列で使用する場合は、データ型STRINGのUTF-8文字列についての注意事項をご参照ください。
文字列が宣言されたフィールド「タイプ(ファンクション、ファンクションブロック、または演算子別)」の入力変数(IN1とIN2)として定義された長さよりも長い場合、エラーが発生します(エラー処理についてはsys_bIsCarryをご参照ください)。
入力または出力に適用される文字列が無効な文字列のとき
入力文字列がフィールド「タイプ(ファンクション、ファンクションブロック、または演算子別)」で入力変数として定義された長さよりも長いとき
入力または出力に適用される文字列が無効な文字列のとき
入力文字列がフィールド「タイプ(ファンクション、ファンクションブロック、または演算子別)」で入力変数として定義された長さよりも長いとき
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
sInputString: STRING[5]:='ABCBC';
(*sample string*)
sSearchString: STRING[2]:='BC';
(*searched string*)
iFoundPos: INT:=0;
(*1st position found*)
END_VAR
この例では、入力変数(sInputString、sSearchString)が宣言されています。ファンクションに、文字列('ABCBC.'と'BC')を直接入力することもできます。POUヘッダ、ファンクションとも、文字列には引用符をつけてください。
sInputString ('ABCBC’)内で、文字列sSearchString ('BC’)を検索します。最初に検出された位置(2)が、出力変数iFoundPosに書き込まれます。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_VARIN,,sInputString,18,1,20,3,);
B(B_VARIN,,sSearchString,18,2,20,4,);
B(B_VAROUT,,iFoundPos,25,1,27,3,);
B(B_F,FIND!,,20,0,25,4,,?DIN1?DIN2?C);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY
iFoundPos := FIND(sInputString, sSearchString);
LD |
sInputString |
FIND |
sSearchString |
ST |
iFoundPos |