- 締切済み
COBOLでの可変長定義について
unix環境下でCOBOL85を使用しています。 あるデータを可変長でWRITEしていくのですが、 データにヘッダー情報みたいなものが付加されてしまい困っています。 ヘッダー情報を付加しないようにするにはどうすればいいのでしょうか? 定義: FD Aファイル RECORD IS VARYING 1 TO 100 DEPENDING ON A-CNT. 01 A-DATA PIC X(100). とか FD Aファイル RECORD IS VARYING IN SIZE DEPENDING ON A-CNT. 01 A-DATA PIC X(100). というパターンで試しています。 Aファイルにaaaという3バイトデータをWRITEすると、 COBOL85020315020304・・・・・aaaというデータが出力されます。 あるコボラーに聞くと「定義がおかしいからでしょう」と言ってたのですが、 どうおかしいかは本人もわからないようです。 どうすればヘッダー情報(COBOL85020315020304・・・・・)がつかず、 可変長でWRITEできるのでしょうか?教えて下さい。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- terra5
- ベストアンサー率34% (574/1662)
>プログラマーとしての仕事範囲しか受けてないので、マシン名称はわかりません。 それは発注側の問題なのでなんとしても必要な情報をもらわないとだめでしょうね。 うちの会社で仕事を受ける場合は、その辺は必要な情報として必ず請求しますし, なければその範囲でしかできませんと確認して作業してます。 必要な情報があるかどうかもわからない状態で来ることも多いし、実際不足している場合が多いので(^^;; 少なくてもターゲットマシンのコンパイラのマニュアルは必ず要求します。 ほとんどCですが、OSや実行環境依存の物が必ずありますし、 特殊な環境(Lynx,aix,pSOS+等)の場合も多々ありますので。 だいたい、unix環境といったって、いろいろありますし。 なんとかユーザーさんからターゲット環境のマニュアルを奪い取ってください。 「ヘッダ情報はCOBOLが勝手につけるから、 コンパイラのマニュアルを見ないと対応できん!」と。
- terra5
- ベストアンサー率34% (574/1662)
COBOLは知らない人間ですが、昔大型汎用機を使った経験と、iris(IREX)上のFORTRANで似たようなことがあったという記憶からの推測です。 COBOLは元々汎用機上での言語ですから。 >あるデータを可変長でWRITEしていくのですが、 この実現の方法に問題があるのかも知れません。 unix,windows(DOS)はファイルの形式自体は単一ですが、 汎用機では違います。 既にうろ覚えですが,固定長形式、可変長形式等いろいろあります。 可変長で書くというのが、元々は可変長の形式で書くための機能で、OSのファイル形式との密接な関係があるように思います。 たしか、OS内部の物理的なファイルのイメージがデータ長+データ本体が1論理レコードとなっていたように思います。 これをunix上で実現するため、汎用機のファイルをエミュレートを状態になっているためと思います。 ですから、COBOL同士で読み書きする分には同じエムレートをして行われるので、 問題なく実行できていると思います。 もし、他のプログラム等で読み書きを行う必要があるものでしたら、 実行時のオプション、コンパイル時のオプション、 ファイルのオープン時のパラメタ等で指定可能かも知れません。 但し、この場合は本来持っているはずの情報が欠落することになると思いますので、 使い方によっては問題が生じるかも知れません。 詳しいことは、そのunix上のCOBOLのマニュアルから ファイル関係の説明の部分を探して読む必要があります。どこかに詳しく説明があるはずです。 場合によると、プログラムの修正等も必要かも知れません。 ただ、汎用機とunixの両方にある程度知識がないと判らないかも知れません。 また、これは言語環境に依存する部分ですから一般的なCOBOL関係の本,マニュアルでは説明が一切無いように思います。 FORTRANでの経験は、やはり余計な管理情報のような物が付加されて、Cとのファイルのやり取りに問題が生じたためです。 詳細は忘れました(^^;; 確か,オープン時の指定を変えたように記憶してますが。 あと、unix環境下のCOBOLでは環境説明が不十分と思います。 具体的な名前を書いた方がいいでしょう。 こういう部分は環境依存ですので、おそらくコンパイラによっても違ってくると思いますので。
お礼
プログラマーとしての仕事範囲しか受けてないので、マシン名称はわかりません。 UNIX環境COBOL85としか判らないんです。^^; ユーザーから、ヘッダー情報をつけるなと言われ、 ついていない可変長レコードを見たことあるとも言われ、 (どこで?と聞き返したら、もう覚えてないようで・・・) 困り果てた状態なんですよ。
お礼
SELECT~ASSIGN句の定義変更でなんとかヘッダー情報を外す事ができました。