%SCAN(search argument : source string {: start})
%SCAN は、ソース・ストリングの中の検索引数の 1 桁目を戻し、または それが見付からない場合には 0 を戻します。 開始位置が指定されている場合、検索はその開始位置から開始されます。 結果は、開始位置が指定されている場合でも、常にソース・ストリング内の 位置です。 開始位置のデフォルトの値は 1 です。
1 番目のパラメーターのタイプは、文字、図形、また は UCS-2 でなければなりません。2 番目 のパラメーターは、1 番目のパラメーターと同じタイプである必要があります。 3 番目 のパラメーターが指定されている場合、それは、小数点以下の桁数がゼロ である数値でなければなりません。
いずれかのパラメーターが可変長である場合、他のパラメーターの値は、 最大長ではなく、現在の長さに対して検査されます。
戻り値のタイプは符号なしの整数です。この組み込み関数は、符号なしの整数式が有効で あればどこでも使用することができます。
検索引数に後書きブランクが含まれている場合、スキャンはそれらの後書きブランクを含めて行われます。 例えば、'b' がブランクを表す場合、%SCAN('12b':'12312b') では 4 が戻されます。 後書きブランクをスキャンの対象に含めたくない場合には、検索引数で %TRIMR を指定してください。 例えば、%SCAN(%TRIMR('12b'):'12312b') と指定すると 1 が戻されます。
詳細については、ストリング命令または 組み込み関数を参照してください。
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D source S 15A inz ('Dr. Doolittle')
D pos S 5U 0
D posTrim S 5U 0
D posVar S 5U 0
D srchFld S 10A
D srchFldVar S 10A varying
/FREE
pos = %scan ('oo' : source);
// After the EVAL, pos = 6 because 'oo' begins at position 6 in
// 'Dr. Doolittle'.
pos = %scan ('D' : source : 2);
// After the EVAL, pos = 5 because the first 'D' found starting from
// position 2 is in position 5.
pos = %scan ('abc' : source);
// After the EVAL, pos = 0 because 'abc' is not found in
// 'Dr. Doolittle'.
pos = %scan ('Dr.' : source : 2);
// After the EVAL, pos = 0 because 'Dr.' is not found in
// 'Dr. Doolittle', if the search starts at position 2.
srchFld = 'Dr.';
srchFldVar = 'Dr.';
pos = %scan (srchFld : source);
posTrim = %scan (%trimr(srchFld) : source);
posVar = %scan (srchFldVar : source);
// After the EVAL, pos = 0 because srchFld is a 10-byte field, so
// the search argument is 'Dr.' followed by seven blanks. However,
// posTrim and posVar are both 1, since the %TRIMR and srchFldVar
// scans both use a 3-byte search argument 'Dr.', no trailing blanks.
/END-FREE