一見すると、解決策は、スペースを含む 2 つの文字列を一緒に STRING への参照変更を使用することです。問題は、FIRST-NAME の末尾にいくつのスペースが存在するかを知っておく必要があることです。そうしないと、'JOHNbbbbbbbbbbbbDOE' のような結果が生成されます。ここで、b はスペースです。
文字列の末尾のスペースの数を決定する組み込みの COBOL 関数はありませんが、文字列の先頭のスペースの数を決定する関数はあります。したがって、私が知る限り、最速の方法は、名を逆にし、先頭のスペースの数を見つけ、参照変更を使用して名と姓をつなぎ合わせることです。
これらのフィールドを作業用ストレージに追加する必要があります。
WORK-FIELD PIC X(15) VALUE SPACES.
TRAILING-SPACES PIC 9(3) VALUE ZERO.
FIELD-LENGTH PIC 9(3) VALUE ZERO.
- FIRST-NAME を逆にする
- ファンクションリバース (ファーストネーム) を WORK-FIELD に移動します。
- WORK-FIELD には、末尾のスペースではなく先頭のスペースが含まれるようになりました。
- FIRST-NAME の末尾のスペースの数を見つける
- ワークフィールド集計の末尾のスペースを調べて、先頭のスペースを探します。
- TRAILING-SPACE には、FIRST-NAME の末尾のスペースの数が含まれるようになりました。
- FIRST-NAME フィールドの長さを調べる
- COMPUTE FIELD-LENGTH = FUNCTION LENGTH (FIRST-NAME)。
- 2 つの文字列を連結します。
- STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) " " LAST-NAME はサイズで区切られ、FULL-NAME になります。