質問
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.
- FIRST-NAMEを逆にする
- 関数リバース (名) を作業フィールドに移動します。
- WORK-FIELD には、末尾のスペースではなく先頭にスペースが含まれるようになりました。
- FIRST-NAME の末尾のスペースの数を調べる
- 作業フィールドの先頭スペースの末尾スペースを集計することを検査します。
- TRAILING-SPACE には、FIRST-NAME の末尾のスペースの数が含まれるようになりました。
- FIRST-NAME フィールドの長さを調べる
- フィールドの長さ = 関数の長さ (名前) を計算します。
- 2 つの文字列を連結します。
- STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) " " 姓をサイズで区切ってフルネームにします。
実際の長さを取得するには、ループを作成してみてください。
所属していません StackOverflow