4

COBOL で、長さが不明な 2 つの文字列を連結するにはどうすればよいですか? たとえば、次のようになります。

WORKING-STORAGE.
    FIRST-NAME    PIC X(15) VALUE SPACES.
    LAST-NAME     PIC X(15) VALUE SPACES.
    FULL-NAME     PIC X(31) VALUE SPACES.

の場合FIRST-NAME = 'JOHN 'LAST-NAME = 'DOE 'どうすれば取得できますか:

FULL-NAME = 'JOHN DOE                       '

とは対照的に:

FULL-NAME = 'JOHN            DOE            '
4

3 に答える 3

5

以下はあなたが望むものをあなたに与えると信じています。

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
于 2008-09-06T00:11:00.563 に答える
3

一見すると、解決策は、スペースを含む 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.
  1. FIRST-NAME を逆にする
    • ファンクションリバース (ファーストネーム) を WORK-FIELD に移動します。
    • WORK-FIELD には、末尾のスペースではなく先頭のスペースが含まれるようになりました。
  2. FIRST-NAME の末尾のスペースの数を見つける
    • ワークフィールド集計の末尾のスペースを調べて、先頭のスペースを探します。
    • TRAILING-SPACE には、FIRST-NAME の末尾のスペースの数が含まれるようになりました。
  3. FIRST-NAME フィールドの長さを調べる
    • COMPUTE FIELD-LENGTH = FUNCTION LENGTH (FIRST-NAME)。
  4. 2 つの文字列を連結します。
    • STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) " " LAST-NAME はサイズで区切られ、FULL-NAME になります。
于 2008-09-05T21:12:52.067 に答える