• ベストアンサー

COBOLの連絡領域について

COBOLの連絡領域(LINKAGE SECTION)について質問です。 通常、プログラム間でデータを引渡す場合、引数を渡す側の プログラムでは、作業領域に引数データを定義したものを渡しますが、 渡す側のプログラムで、作業領域でなく連絡領域に引数データを 定義した場合でも引数データは、うまく渡されるのでしょうか? その場合の影響などは何かあるのでしょうか? 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

対象としているのは、どこのメーカーの何というCOBOLコンパイラの話ですか? COBOLのメインプログラムに、外部からパラメタ渡しする方法もありますし、最新の標準規格に対応していれば、パラメタの省略なども可能になっています。 アドレスが対応付けられていないのに、参照したりすれば、例外が発生します。

hakuba777
質問者

補足

IBMのCOBOL2というコンパイラです。 単にメインプログラムの連絡領域に定義したデータを サブプログラムへ引渡せて、かつ参照できるかどうか知りたいです。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

こう言うことでしょうか? 呼び出し元1 -> 呼ばれるプログラム1 -> 呼ばれるプログラム2 呼び出し元1 CALL 呼ばれるプログラム1 USING 呼び出し元1の変数 呼ばれるプログラム1 USING XX CALL 呼ばれるプログラム2 USING XX 呼ばれるプログラム2 USING ZZ ですか?呼び出し元1の変数、XX、ZZの定義が一致していれば何の問題も無いです。

関連するQ&A

  • pro*cobol ⇔ oracle のデータ型の扱い

    お世話になります。 pro*cobolで、テーブルの作業領域を定義し、 データの編集後、oracleのテーブルへ出力している のですが、cobol側の定義はpic9タイプで oracleの項目定義ではCHAR型になっております。 この状態で、cobol側のpic9タイプの項目に "A00001"等文字を含む値を設定した所、 ABENDせずにoracleテーブルに"A00001"の 項目値を出力しています。 cobolだけに限れば、属性エラーなのですが、 この場合、oracleの項目定義が優先されるのでしょうか? よろしくご教授の程、お願い申し上げます。

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

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

  • COBOLで「WORKING-STORAGE SECTION.」と「L

    COBOLで「WORKING-STORAGE SECTION.」と「LINKAGE SECTION.」を 使用して、呼び出そうとしていますが以下のエラーが発生してしまいます。 「line12,column 6:""SAMPLE-02""文法が間違っています。」 です。 どのように文法が間違っているのでしょうか? 以上、よろしくお願いします。 「SAMPLE_01.COB」 ---------------------------------------------- *文字列の表示 IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-01. * ENVIRONMENT DIVISION. * DATA DIVISION. WORKING-STORAGE SECTION. 01 HELLO PIC X(12) VALUE "Hello World!". * PROCEDURE DIVISION. CALL "SAMPLE-02" USING HELLO. STOP RUN. 「SAMPLE_02.COB」 ---------------------------------------------- *項目に値を入れる IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-02. * ENVIRONMENT DIVISION. * DATA DIVISION. LINKAGE SECTION. 01 HELLO PIC X(12). * PROCEDURE DIVISION USING HELLO. DISPLAY HELLO. STOP RUN.

  • COBOLのプログラムで・・。

    現在COBOLプログラムを作ってまして以下のプログラムで表示結果が「EQUAL」となるようにしたいのですがどうやったらいいでしょうか?回答のほうよろしくお願いします、以下がプログラムです。 IDENTIFICATION DIVISION. PROGRAM-ID. TEST9. DATA DIVISION. * WORKING-STORAGE SECTION. * 01 GR01. 02 DATA1 PIC N(2). * 01 DATA2 PIC N(2). 02 SPACE TO DATA2 * PROCEDURE DIVISION. * MOVE SPACE TO GR01. * MOVE SPACE TO DATA2. IF DATA1 = DATA2 THEN DISPLAY "EQUAL" ELSE DISPLAY "NOT EQUAL" END-IF. * * STOP RUN. * END PROGRAM TEST9.

  •  cobolのカーソルについて

     cobolのカーソルについて  初投稿させていただきます。ですので体裁やルールを守れていない場合は、ご指摘願います。  cobolにおいて埋め込みSQL文によるカーソルをオープンし、fetchでテーブルを読み込む作業についてなんですが、一度のプログラム起動において同じテーブルを複数回読むにはどのようなソースを描けばよいのでしょうか。  具体的にはあるテーブルの5個のレコードを上から順に何度も読むといった次第です。  お分かりになられる方がいましたら、ご指導願います。よろしくお願いします。

  • COBOLから呼ばれる時

    COBOLプログラムから呼び出され、ファイルのレコードを一行読んでレコードの内容を返すというcサブルーチンを作っているのですが、COBOL←→c間でのインタフェースの扱いかたがよくわからなくて困っています。(ちなみにこのモジュールはcからも呼ばれる事がある) COBOLはコピー句(test001.cbl, test002.cbl)に値を入れて、cサブルーチンにそれを渡しています。 テストはCOBOL85を使用してるので、cサブルーチンの中のデータを見ることができません。なので、返ってくるコピー句の中身を見るのですが、とにかく値が設定されてかえってこないのです。ただ単にロジックのバグと言う可能性もあるけど(^^; 私はインタフェース環境の事がまだ良く解っていないので、今回こちらに質問した次第です。経験者の方がいましたら、どうかおしえてください。 あ、それからCOBOLから渡される値は、c側では全てchar型で受け取らなければいけないような話しを聞いたのですが、本当でしょうか? もう一つ。 コピー句の中で「F-CODE PIC X(2)」のようにハイフンがあるのですが、cではハイフンが使えないからダメなんでしょうか? たくさん質問してしまいましたが、どうかよろしく。 /COBOL側/ -------------------------------------------------- CALL 'TEST1' USING BY VALUE TEST001 TEST002. -------------------------------------------------- /cサブルーチン側/ -------------------------------------------------- int TEST1(test001, test002) char *test001; char *test002; {     ・     ・     ・ return (0); } --------------------------------------------------

  • COBOLの検索方法について

    はじめまして。今、COBOLでプログラムを作成しているんですが初めて触る言語でわからない事が多いです。その中でデータを最後から検索して最初のスペースがあれば、それより前のデータをを出力するというのがあるのですが、やり方がよくわかりません。わかりやすく教えてもらえませんか? 図で表すと AAAAAA BBBBBB CCCCCCCC これをCから検索して、最初のスペース(BとCの間)から左側を出力するプログラムで

  • COBOLのCALL文がいまいちつかめません。

    いつもお世話になっています。 WINDOWSでCOBOL85を使いながら、COBOLの勉強をしています。 JAVAを基本情報試験のために勉強したくらいの初心者です。 シーケンシャルファイルでマッチング処理を行う、 小さなプログラムを課題としている途中、 CALL文を使ってサブプログラムを作ってみてくださいと言われました。 そこで質問なのですが、 メインプログラムの集団項目をUSING指定で引数として、 サブプログラムで受け取り、処理をするまではいいのですが、 戻り値をどのようにして受け取ればいいのかが イメージがつかめません。 ・戻り値を受け取るための命令 ・戻り値は1つだと思うのですが、どの変数?に返ってくるのか (集団項目ごと返ってくる?) など、何かあればご助言をいただけないでしょうか? ソースは次の通りです。 よろしくお願いいたします。 ■メイン IDENTIFICATION DIVISION. PROGRAM-ID. MACHING_TEST. (省略) WORKING-STORAGE SECTION.   01 JUDGE_F.    03 KEY_F     PIC 9(01).    03 CHANGE_F     PIC X(06).    03 EXCEP_M     PIC 9(01). (省略) CALL "JUDGE_FEMALE" USING JUDGE_F ON EXCEPTION   DISPLAY N"エラーです。プログラムを終了します"   STOP RUN   NOT ON EXCEPTION    IF EXCEP_M = 9 THEN MOVE "ERRER!" TO FEMALE_OUT ELSE  IF EXCEP_M = 1 THEN MOVE CHANGE_F TO  FEMALE_OUT  END-IF    END-IF    END-CALL. (以下略) ■サブ IDENTIFICATION DIVISION. PROGRAM-ID. JUDGE_FEMALE. DATA DIVISION. LINKAGE SECTION. 01 JUDGE_F.  03 KEY_F PIC 9(01).  03 CHANGE_F PIC X(06).  03 EXCEP_M PIC 9(01). PROCEDURE DIVISION USING JUDGE_F. IF KEY_F = 1  THEN   MOVE "オトコ" TO CHANGE_F   MOVE 1 TO EXCEP_M  ELSE   IF KEY_F = 2 THEN  MOVE "オンナ" TO CHANGE_F  MOVE 1 TO EXCEP_M ELSE  MOVE 9 TO EXCEP_M END-IF END-IF. PROGRAM-END.  STOP RUN.

  • COBOL

    こんにちわ、IT企業の新卒ではありませんが研修生です。 COBOLの勉強をしています。以下の内容についてご質問させていただきます。 (1)データフォーマットがOCCURS(300 TIMES)のデータ項目に40 TIMESデータを格納し、 41個目には改行コード(ODOA)が入っているプログラムがあるのですが、 実際に41個目をdisplayで見てみると空白が入っていました。ファイルの方には確かに改行コードがちゃんと入っています。 これはどうしてこうなるのでしょうか? (2)SEARCHに関して SEARCH TBL AT END 処理1 というようなプログラムがあります。 TBLは 01 TBL 02 DATA OCCURES 100 INDEXED BY NO     03・・・ 03・・・ というようなフォーマットになってます。 このときAT ENDというのは例えば(1)のときのようなデータとしては 100TIMES入れれるが、40TIMESしか格納しない場合は41個目にAT ENDになるのでしょうか? それとも100回全部入れ終わった時のみAT ENDになるのでしょうか? お手数ですが以上よろしくお願い致します。

  • COBOLでのチェックデジット算出

    COBOL初心者です。 01 印刷領域. 03 Aコード PIC X(03). 03 Bコード PIC X(04). 03 Cコード PIC X(02). 03 チェックデジット PIC X(01). と定義した変数のA,B,Cコードだけをサブルーチンに渡して、チェックデジットを受け取りたいと思います。 このときチェックデジットを抜いた"印刷領域"を渡すことは可能でしょうか? 例) Aコード 102 Bコード 2001 Cコード 03 渡すデータ102200103 受け取るチェックデジット7 印刷領域 1022001037 という具合にしたいんですが… あと、A,B,Cコードは数字に変換しなければなりません。 すみませんがおしえてください(ToT)/~~~

専門家に質問してみよう