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できるのでしょうか?教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>プログラマーとしての仕事範囲しか受けてないので、マシン名称はわかりません。



それは発注側の問題なのでなんとしても必要な情報をもらわないとだめでしょうね。

うちの会社で仕事を受ける場合は、その辺は必要な情報として必ず請求しますし,
なければその範囲でしかできませんと確認して作業してます。
必要な情報があるかどうかもわからない状態で来ることも多いし、実際不足している場合が多いので(^^;;

少なくてもターゲットマシンのコンパイラのマニュアルは必ず要求します。
ほとんどCですが、OSや実行環境依存の物が必ずありますし、
特殊な環境(Lynx,aix,pSOS+等)の場合も多々ありますので。
だいたい、unix環境といったって、いろいろありますし。

なんとかユーザーさんからターゲット環境のマニュアルを奪い取ってください。

「ヘッダ情報はCOBOLが勝手につけるから、
コンパイラのマニュアルを見ないと対応できん!」と。
    • good
    • 0
この回答へのお礼

SELECT~ASSIGN句の定義変更でなんとかヘッダー情報を外す事ができました。

お礼日時:2002/04/11 16:54

COBOLは知らない人間ですが、昔大型汎用機を使った経験と、iris(IREX)上のFORTRANで似たようなことがあったという記憶からの推測です。


COBOLは元々汎用機上での言語ですから。


>あるデータを可変長でWRITEしていくのですが、
この実現の方法に問題があるのかも知れません。

unix,windows(DOS)はファイルの形式自体は単一ですが、
汎用機では違います。
既にうろ覚えですが,固定長形式、可変長形式等いろいろあります。
可変長で書くというのが、元々は可変長の形式で書くための機能で、OSのファイル形式との密接な関係があるように思います。
たしか、OS内部の物理的なファイルのイメージがデータ長+データ本体が1論理レコードとなっていたように思います。

これをunix上で実現するため、汎用機のファイルをエミュレートを状態になっているためと思います。
ですから、COBOL同士で読み書きする分には同じエムレートをして行われるので、
問題なく実行できていると思います。

もし、他のプログラム等で読み書きを行う必要があるものでしたら、
実行時のオプション、コンパイル時のオプション、
ファイルのオープン時のパラメタ等で指定可能かも知れません。
但し、この場合は本来持っているはずの情報が欠落することになると思いますので、
使い方によっては問題が生じるかも知れません。

詳しいことは、そのunix上のCOBOLのマニュアルから
ファイル関係の説明の部分を探して読む必要があります。どこかに詳しく説明があるはずです。
場合によると、プログラムの修正等も必要かも知れません。
ただ、汎用機とunixの両方にある程度知識がないと判らないかも知れません。
また、これは言語環境に依存する部分ですから一般的なCOBOL関係の本,マニュアルでは説明が一切無いように思います。


FORTRANでの経験は、やはり余計な管理情報のような物が付加されて、Cとのファイルのやり取りに問題が生じたためです。
詳細は忘れました(^^;;
確か,オープン時の指定を変えたように記憶してますが。


あと、unix環境下のCOBOLでは環境説明が不十分と思います。
具体的な名前を書いた方がいいでしょう。
こういう部分は環境依存ですので、おそらくコンパイラによっても違ってくると思いますので。
    • good
    • 0
この回答へのお礼

プログラマーとしての仕事範囲しか受けてないので、マシン名称はわかりません。
UNIX環境COBOL85としか判らないんです。^^;
ユーザーから、ヘッダー情報をつけるなと言われ、
ついていない可変長レコードを見たことあるとも言われ、
(どこで?と聞き返したら、もう覚えてないようで・・・)
困り果てた状態なんですよ。

お礼日時:2002/03/18 12:56

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCOBOLでHEXを印字する

COBOLで項目内容を16進表示で印字したい。
例 12345 → F1F2F3F4F5

よろしくお願いします。

Aベストアンサー

テーブルサーチでしょうね。ディスプレイ値とヘキサ値の対応表をサーチ命令でサーチすればいい。

それ以外の方法としては、アッセンブラ-でサブプログラムを作ってコード変換させるのがいいと思います。

QCOBOL85からCOBOL2002移行

HPのOSバージョンアップして、COBOL85からCOBOL2002移行の作業をしました。再コンパイルして、生成されたモジュール(又はオブジェクトファイル.o)のサイズは元の2、3倍になってしまいましたが、どういうことですか?ご教示お願いします。

Aベストアンサー

>なぜバイナリ構造が変更したら、実行モジュール大きくなるのは
>少し、詳しく教えていただけませんか。
ちゃんと書くと長いので掻い摘んで描くと
RISCではコンパイル時点で命令を細かく分け、実行時に並列計算できるもの探して実行していましたが、
Itaniumで採用したEPICではコンパイル時点で並列部分を抽出し実行モジュールに並列情報を持たせています。
アーキテクチャが変わると実行モジュールの構成(サイズ)が変わるのは仕方がないことです。

QCOBOLの定義について

COBOLの定義で
PIC S9 (07) COMP-3
というデータがあってこれを自分で書かなくてはなりませんが、どんなにやってもデータ例外が出てしまします。自分ではHEX状態で
-------
001
00C
-------
みたいなものかと思っていますが、違うようです。

どなたかわかるかたいましたら教えていただけませんか。
よろしくお願しまSう。

Aベストアンサー

>ファイルナンバーは文字列なので

文字としたいなら、「PIC X(n)」で宣言する必要があります。
「PIC 9(n)」は、外部10進であり、そのまま演算にも使えれば表示もできる型です。

PIC 9(5)であれば、内部形式は次のようになります。

X'FdFdFdFdsd'

1バイトを縦で表す方が分かりやすければ、

FFFFs
ddddd

です。

dはX'0'~'9'の値、sは符号で、正=X'C'、負=X'D'、符号なし=X'F'。
dの部分に、'0'~'9'以外の値を入れて参照すると、データ例外になります。

QCOBOL97,Power-COBOLでの効率の良い書き方

汎用機のCOBOLでは添字にはCOMP-1を使うと効率が良いとか、ベースレジスタ削減のために 01レベルのワーク領域の数を減らす(少数の01レベルの配下にワーク領域を定義する)などがマニュアルに記載されていました。
ところがパソコン/サーバ上で動くCOBOLの場合は、計算用にCOMP-3を使うと処理効率が悪い、計算用ではCOMP-3よりはDISPLAY項目、さらに良いのはCOMP-5である、などと言う記事もあり汎用機COBOLとはずいぶん違うようです。実際のところ、パソコン/サーバ上で動くCOBOLで実行時の効率が良いプログラムを書くためには、どのような事に注意すれば良いのでしょうか?

Aベストアンサー

以下が参考になるのでは?

http://q.hatena.ne.jp/1171405263

>>実際のところ、パソコン/サーバ上で動くCOBOLで実行時の効率が良いプログラムを書くためには、どのような事に注意すれば良いのでしょうか?

昔は、汎用機やオフコン、パソコンでCOBOLのアプリを書いていました。ハードレベルのことは、よくわかりませんが、記載されていたとおりだという気がしますね。でも、メモリーや処理効率が悪とはいっても、人間のレベルからしたら、気にしないでもいい程度だと思いますよ。

個人的には、メモリ効率等よりも汎用機・オフコンなどとソースの共用ができるほうが良いと思うので、汎用機に合わせたいところですが、汎用機で使う予定が無いならパソコン・サーバ上でベストな指定でもいいかもしれませんね。

そして、数値計算(特にお金の計算)では、10進で行われるCOMP-3が計算誤差やデバッグの容易さで有利だと思えます。

QCOBOL,MFCOBOLについて

こんにちは。
今日はCOBOL,とMFCOBOLについて教えていただきたいです。

COBOLとはどのような言語でどのように使われているのか?
MFCOBOLとはどのような言語でどのように使われ、COBOLとは何が違うのか?

以上のことを教えてください。
お願いしまーす。

Aベストアンサー

>COBOLとはどのような言語でどのように使われているのか
(1)決まった語句を使って英語を書くようにプログラムする
 言語。センテンスの終わりは「.」。読んで判りやすい。
(2)4つのディビジョンがある。
(3)ファイル定義をまずする。
(4)コンパイル言語。
(5)事務計算向け。10進演算。
(6)会社等にCOBOLのソフト遺産が膨大にありそう。
   過去には大規模システムに採用された。昔は大型機中型   機での利用が多かった。コンパイラが重いため。
(7)40年の歴史。現在も進化している。
(8)CODASYL(団体)が管理。
http://www-6.ibm.com/jp/developerworks/linux/000929/j_cobol.html
http://members10.tsukaeru.net/bitwalk/cobol.html
http://www.suzugamine.ac.jp/~moriya/bunpou.html
http://www4.ocn.ne.jp/~nishi10/cobol.htm
http://hp.vector.co.jp/authors/VA003604/comp/develop/lang/cobol.htm
http://www.cobol.gr.jp/knowledge/technical/tec006.html
今後に関して1見解。
http://nc.nikkeibp.co.jp/jp/articles/features/20000828/
http://itpro.nikkeibp.co.jp/free/NC/NEWS/20010613/4/
○MFCOBOLはマイクロフォーカスジャパン(株)の販売しているCOBOL処理系の1つ。

>COBOLとはどのような言語でどのように使われているのか
(1)決まった語句を使って英語を書くようにプログラムする
 言語。センテンスの終わりは「.」。読んで判りやすい。
(2)4つのディビジョンがある。
(3)ファイル定義をまずする。
(4)コンパイル言語。
(5)事務計算向け。10進演算。
(6)会社等にCOBOLのソフト遺産が膨大にありそう。
   過去には大規模システムに採用された。昔は大型機中型   機での利用が多かった。コンパイラが重いため。
(7)40年の歴史。現...続きを読む

Qオフコン(富士通Kシリーズ)COBOLと汎用機COBOLの違い

 私、富士通オフコン(KやPRIMERGY6000)でのシステム開発を10年以上やっています。当然COBOL言語での開発です。オフコン市場が縮小傾向(AS400は別のようですが)にあるなか、汎用機の開発やリプレースは盛んに行われていると認識しています。

 私の勘ではデータベースのREAD/WRITEのあたりや画面プログラムの表示のさせ方などが違うのでは、と思うのですが、実際に富士通オフコンのCOBOL-Gと汎用機(富士通でもIBMでもなんでも構いません)COBOLを経験された方に、その相違点をお聞きしたく存じます。

 宜しくお願いします。

Aベストアンサー

COBOLというより、DBMSやDCモニタ(富士通ならAIM,IBMならCICSやIMS等)による違いですね。
DBについてはSQLをサポートするRDBMSなら、アプリケーションのコーディングレベルは大きな違いは無いでしょうけど、階層型やネットワーク型DBだとそれぞれ独自の特色があるので使うDBMSによって大きく異なるでしょう。
画面は最近はメインフレームでもWWWを使ったりもするようですが、そうでもない限り、これもDCモニタによってやり方は全然違います。
従って、メインフレームの勉強をしたいのなら、まずターゲットとするDB/DCを決めないといけません。

QCOBOLの勉強をしたいのですが・・・

私は、独学でプロラムを勉強しているのですが、COBOLに関して解らない事があります。NEC用ACOS1-4とかの端末機でも良いので、COBOL勉強をしたいのです。
一般には、なかなか手には入りません。なぜ端末かと言うと、一般PCはどこでも手に入り勉強が出来ますが、オフコンは専門学校か企業でしか触れません。オフコンでCOBOLの勉強する方法は無いでしょうか?無ければCOBOLの一般用ソフトは今存在するのでしょうか?
COBOLの勉強をしたいです。

Aベストアンサー

海外のサイトになるのですが、富士通さんが、勉強用
として、フリーのCOBOLを配布しているようです。

http://download.cnet.com/downloads/0-10085-100-895627.html

それから、COBOL関係の情報のある
「コボラー ドット コム」を紹介しておきます。

http://www.coboler.com/

市販のCOBOLの中では、PowerCOBOLのアカデミック
エディション(Scoolとなってます)で8万円ぐらい
ですね(www.getplus.co.jpにて調べました)

PCで動くCOBOLは、富士通のPower COBOL97,
日立のCOBOL85、あとは、Microfocus COBOLなどが
ありますが、業務向けなので、結構高価です。

QPIC 16F84A のプログラム

①MOVLW 01H と
②MOVLW 9 というのは
どのように動作が違うのでしょうか?
①はWレジスタに16進数"01"をセットするということだと思うのですが
②もWレジスタに10進数"9"をセットするということなのですか?

Aベストアンサー

PICは手がけたことが無いので一般論ですが
レジスタに値が入った時点では、それは数値になるので
値を16進数で表記しようが、10進数で表記しようが何ら関係ありません。
では、なぜ値を16進数で表記したり、10進数で表記したりするのか?
それは人間に対して判り易くするためです。
例えば、
値が個数を表しているなら10進数で表記したほうが判り易い。
値がポートの出力パターンを表しているなら16進数(欲を言えば2進数)で表記したほうが判り易い。
それだけです。

Qhexについて

応答メッセージなどに関する文書なのですが、hexという表現が出てきます。04hexとか、27hexとか・・・いろいろなのですが、数字プラスhexというのは、どういう意味なのでしょうか。

Aベストアンサー

16進数である事を表すためにhexやhを使います。
04h、27hと言う具合にです。
04hはコード表でEOT、End Of Text、文の終わり、27hはアポストロフです。意味はその通信のプロトコル次第なのでわかりません。
http://c-production.com/special/03090704.html

QPIC16F84Aで入力があるとスタートするプログラム

PIC16F84Aで、アセンブリ言語でプログラムをしています。

RA4を入力端子とし、入力があればプログラムがスタートするということをしたいんですけどうまくいきません。

私の作ったプログラムはこのようになっています。

 listp=16f84A 
 include <p16f84A.inc>
 __CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF

tim1   EQU  0x20
     org  0x00
     NOP
     GOTO start

start
     BSF  STATUS,RP0
     MOVLW B'00010000'
     MOVWF TRISA
     CLRF TRISB
     BCF  STATUS,RP0
     MOVLW B'00010000'
     MOVWF PORTA
     CLRF  PORTB

main
     MOVLW  001h
     MOVWF  tim1
timlp1  BTFSC  PORTA,5
     CALL   playball
     GOTO   main

playball
     MOVLW  B'00001111'
     MOVWF  PORTA
     MOVLW  B'11111111'
     MOVWF  PORTB
     RETURN

修正点などありましたら教えて下さい。

PIC16F84Aで、アセンブリ言語でプログラムをしています。

RA4を入力端子とし、入力があればプログラムがスタートするということをしたいんですけどうまくいきません。

私の作ったプログラムはこのようになっています。

 listp=16f84A 
 include <p16f84A.inc>
 __CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF

tim1   EQU  0x20
     org  0x00
     NOP
     GOTO start

start
     BSF  STATUS,RP0
     MOVLW B'00010000'
     MOVWF TRISA
...続きを読む

Aベストアンサー

BTFSC  PORTA,5

BTFSC  PORTA,4
ではないのですか?(RA4が入力でしょ?)
入力の回路がわかりませんが
BTFSS  PORTA,4
かも知れませんね。
恐らくasmの冒頭だけの抜粋だと思いますので
どんな動作かはわかりかねますがここまでの回路までなら普通に動作すると思います。
(最後にENDを追加した形でMPLAB IDEでシュミレーション確認済)   


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報