質問

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            '
役に立ちましたか?

解決

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

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.

他のヒント

一見すると、解決策は、STRING への参照変更を使用して、スペースを含む 2 つの文字列をまとめることです。問題は、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 には、末尾のスペースではなく先頭にスペースが含まれるようになりました。
  2. FIRST-NAME の末尾のスペースの数を調べる
    • 作業フィールドの先頭スペースの末尾スペースを集計することを検査します。
    • TRAILING-SPACE には、FIRST-NAME の末尾のスペースの数が含まれるようになりました。
  3. FIRST-NAME フィールドの長さを調べる
    • フィールドの長さ = 関数の長さ (名前) を計算します。
  4. 2 つの文字列を連結します。
    • STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) " " 姓をサイズで区切ってフルネームにします。

実際の長さを取得するには、ループを作成してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top