PATTERN - 文字列からパターンを生成
PATTERN 関数は、ソース文字列を分析し、ソース文字列の数字、小文字、大文字の配列を表すパターンを作成します。この関数は、データを分析して標準パターンに適合したデータであることを確認する場合に役立ちます。
出力パターンは次のようになります。
- 1 バイトの入力文字は「9」で表されます。
- 大文字は「A」、小文字は「a」で表されます。欧州 NLS モード (西ヨーロッパ、中央ヨーロッパ) では、「A」および「a」はアクセント記号付きアルファベットにも適用されます。
- 日本語の場合、2 バイト文字と半角カタカナは大文字の「C」で表示されます。2 バイト文字には、ひらがな、カタカナ、漢字、全角英数字、および全角記号が含まれます。中国語や韓国語などのすべての 2 バイト文字も「C」で表示されます。
- 特殊文字はそのまま表示されます。
- 表示不可の文字は「X」で表示されます。
入力文字列からパターンを作成
PATTERN (length, source_string, output)
説明
length
数値
source_string の長さです。
source_string
文字
ソース文字列です。文字列は、一重引用符 (') で囲みます。文字列を含むフィールドを指定することもできます。
output
文字
結果を格納するフィールド名、またはフィールドのフォーマットです。フォーマットは一重引用符 (') で囲みます。
文字データからパターンを作成
TESTFILE という名前の固定フォーマットシーケンシャルファイル (LRECL 14) には、次の 19 件のレコードが格納されています。
212-736-6250 212 736 4433 123-45-6789 800-969-INFO 10121-2898 10121 2 Penn Plaza 917-339-6380 917-339-4350 (212) 736-6250 (212) 736-4433 212-736-6250 212-736-6250 212-736-6250 (212) 736 5533 (212) 736 5533 (212) 736 5533 10121 Æ 800-969-INFO
マスターファイルは次のとおりです。
FILENAME=TESTFILE, SUFFIX=FIX ,
SEGMENT=TESTFILE, SEGTYPE=S0, $
FIELDNAME=TESTFLD, USAGE=A14, ACTUAL=A14, $
次のリクエストは、TESTFLD の各インスタンスのパターンを生成し、生成されたパターン別にインスタンスを表示します。また、このリクエストは各パターンの個数を集計し、総数に対するパーセントを表示します。PRINT コマンドは、生成された各パターンの TESTFLD の値を表示します。
DYNAM ALLOC DD TESTFILE DA USER1.TESTFILE.FTMFILEDEF TESTFILE DISK testfile.ftmDEFINE FILE TESTFILE PATTERN/A14 = PATTERN (14, TESTFLD, 'A14' ) ; END TABLE FILE TESTFILE SUM CNT.PATTERN AS 'COUNT' PCT.CNT.PATTERN AS 'PERCENT' BY PATTERN PRINT TESTFLD BY PATTERN ON TABLE COLUMN-TOTAL END
最後から 2 つ目の行を見ると、入力文字列に表示不可の文字が含まれていたため、生成されたパターンではその文字が「X」で表示されています。それ以外の出力文字列では、数字は「9」、大文字は「A」、小文字は「a」で表示されています。出力結果は次のとおりです。
PATTERN COUNT PERCENT TESTFLD
------- ----- ------- -------
(999) 999 9999 3 15.79 (212) 736 5533
(212) 736 5533
(212) 736 5533
(999) 999-9999 2 10.53 (212) 736-6250
(212) 736-4433
9 Aaaa Aaaaa 1 5.26 2 Penn Plaza
999 999 9999 1 5.26 212 736 4433
999-99-9999 1 5.26 123-45-6789
999-999-AAAA 2 10.53 800-969-INFO
800-969-INFO
999-999-9999 6 31.58 212-736-6250
917-339-6380
917-339-4350
212-736-6250
212-736-6250
212-736-6250
99999 1 5.26 10121
99999 X 1 5.26 10121 Æ
99999-9999 1 5.26 10121-2898
TOTAL 19 100.00