%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
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.