FIND_AFTER_POS

文字列中の位置の検索

FIND_AFTER_POS命令は、1番目の入力文字列IN1の先頭位置Pから、2番目の入力文字列IN2が存在するどうかを検索して、その位置を返します。演算結果は、出力変数に書き込まれます。1番目の入力文字列内に、2番目の入力文字列がなければ、値"0"を返します。

パラメータ

入力

IN1 (STRING)

先頭の入力文字列

IN2 (STRING)

入力文字列内で検索する文字列(大文字小文字の区別あり)

P (INT)

検索する入力文字列の開始位置。1は文字列の1文字目になります

出力

未定義出力 (INT)

検索文字列が検出された位置

  • 値が0より大きい場合:検索して見つかった文字列の位置(1は最初の文字を表す)

  • 値が0の場合:検索文字列が見つからない

解説

  • この命令をUTF-8文字列で使用する場合は、データ型STRINGのUTF-8文字列についての注意事項をご参照ください。

  • 文字列が宣言されたフィールド「タイプ(ファンクション、ファンクションブロック、または演算子別)」の入力変数(IN1IN2)として定義された長さよりも長い場合、エラーが発生します(エラー処理についてはsys_bIsCarryをご参照ください)。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)

入力または出力に適用される文字列が無効な文字列のとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)

入力または出力に適用される文字列が無効な文字列のとき

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。

	VAR
		bStart: BOOL:=FALSE;
		sInputString: STRING[32]:='A better life. A better world.';
		sSearchString: STRING[32]:='A';
		iStartPos: INT:=8;
		iFoundPos: INT:=0;
	END_VAR

この例では、入力変数sSearchStringsInputStringが宣言されています。ファンクションに文字列を直接入力することもできます。POUヘッダ、ファンクションとも、文字列には引用符をつけてください。

POUボディ

sSearchStringは、sInputStringの先頭位置8から検索されます。位置8のあとに最初に検出された位置が、出力変数iFoundPosに書き込まれます。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_F,E_FIND_AFTER_POS!,,19,1,28,7,,?DEN?DIN1?DIN2?DP?AENO?C);
B(B_VARIN,,sInputString,17,3,19,5,);
B(B_VARIN,,sSearchString,17,4,19,6,);
B(B_VARIN,,iStartPos,17,5,19,7,);
B(B_VAROUT,,iFoundPos,28,3,30,5,);
B(B_CONTACT,,bStart,13,2,15,4,);
L(1,3,13,3);
L(15,3,19,3);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

IF bStart then
    iFoundPos:= FIND_AFTER_POS(sInputString, sSearchString);
END_IF;

ILボディ

最終修正日: 2024-03-22このページに関するフィードバックお問い合わせ窓口