fj.comp.lang.cobolへ振ります。

In article <uu17rw9g8.fsf@anet.ne.jp> tksotn@anet.ne.jp writes:
>>        http://www.lbm.go.jp/toda/comp/struct.html
>> を改訂してみました。
>そこから引用:
>>COBOLの名前空間は全体で1つであり、メンバー変数の名前を個々の構造体ごとに
>>変えねばならない。そして、構造体変数の代入は常に並び順照合である。
>これは間違ってます。
情報ありがとうございます。

ただ、私の知り得る情報を総合した限りでは、
「間違っている」のではなく「情報が古い」のではないかと思うのですが、
如何でしょうか?

実は私のCOBOLに関する知識は、(恐ろしいことに)1982年で停まっておりまして、
従って、「第3次規格」(ANSI 1985, ISO 1985, JIS 1988)以前なのです。
使っていた教科書にも、
「構造化プログラミングを導入する改訂の規格化が進められている」と
コラムの中で触れられていて、
手続き部の書き方に関する簡単な例が挙げられているだけで、
詳細な内容はありません。

>>PL/Iでは、異なる構造体に同一名のメンバーが属することを許容し
>>(むしろ同一構造の構造体には同一メンバ名を用いることを推奨し)、
>>代入に際して名前で照合する「BY NAME」指定を導入した。
>と書いてあるPL/Iと同じです。同じ名前の要素の参照は、「要素名 OF 親の名」
>で参照します。要素名がプログラム中でユニークなら「OF 親の名」は省略可。
>名前で照合して代入や計算するのは CORRESPONDING 。
というのも、発想的にはalgol系の世界から持ってきた
(直接にはPL/Iから逆輸入した?)と考えられる内容なので、
第3次規格の際に導入されたのではないかとニラんでいるのですが、
裏付ける情報が全く得られていません。

どこかに、第3次規格の際の改定内容の詳細を
簡潔にまとめたテキストって無いでしょうか?

>>ちなみに、COBOLで構造の異なる構造体変数へ代入する場合は、一旦バイト列に
>>分解して頭から変数に切り直すという恐ろしい仕様(ファイル入出力のバッファ
>>という発想からすれば自然か?)になっている。
>これはちょっと意味がわかりません。構造の異なる構造体変数への代入は
>ごく普通に親の名前を使って MOVE すればできるのでは?
「分解」というより「展開」と表現した方が良かったかな?
例えば、
        01 ORGNSTRC.
          10 ORGNTEXT1 PIC X(4).
          10 ORGNTEXT2 PIC X(6).
と
        01 DESTSTRC.
          10 DESTTEXT1 PIC X(6).
          10 DESTTEXT2 PIC X(4).
があって、
ORGNTEXT1の内容が「1234」、ORGNTEXT2の内容が「ABCDEF」だったときに
        MOVE ORGNSTRC TO DESTSTRC.
とすると、
DESTTEXT1の内容は「1234AB」、DESTTEXT2の内容は「CDEF」になる
(つまり、メンバ変数間の区切りが無視される)ということです。

                                戸田 孝@滋賀県立琵琶湖博物館
                                 toda@lbm.go.jp