いつもお世話になっています。
WINDOWSでCOBOL85を使いながら、COBOLの勉強をしています。
JAVAを基本情報試験のために勉強したくらいの初心者です。
シーケンシャルファイルでマッチング処理を行う、
小さなプログラムを課題としている途中、
CALL文を使ってサブプログラムを作ってみてくださいと言われました。
そこで質問なのですが、
メインプログラムの集団項目をUSING指定で引数として、
サブプログラムで受け取り、処理をするまではいいのですが、
戻り値をどのようにして受け取ればいいのかが
イメージがつかめません。
・戻り値を受け取るための命令
・戻り値は1つだと思うのですが、どの変数?に返ってくるのか
(集団項目ごと返ってくる?)
など、何かあればご助言をいただけないでしょうか?
ソースは次の通りです。
よろしくお願いいたします。
■メイン
IDENTIFICATIONDIVISION.
PROGRAM-ID.MACHING_TEST.
(省略)
WORKING-STORAGESECTION.
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.
(以下略)
■サブ
IDENTIFICATIONDIVISION.
PROGRAM-ID.JUDGE_FEMALE.
DATADIVISION.
LINKAGESECTION.
01 JUDGE_F.
03 KEY_FPIC 9(01).
03 CHANGE_FPIC X(06).
03 EXCEP_MPIC 9(01).
PROCEDUREDIVISIONUSINGJUDGE_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.
No.3ベストアンサー
- 回答日時:
メインからは
CALL "JUDGE_FEMALE" USING JUDGE_F
とJUDGE_Fいう項目を使ってサブをコールしてます。
質問文では書かれてませんが、CALLする前に、KEY-Fに1、2、もしくはそれ以外がセットされてるんだと思います。
つまり、8バイトの頭1バイトだけセットしてコールするわけです。
01 JUDGE_F.
03 KEY_F PIC 9(01).
03 CHANGE_F PIC X(06).
03 EXCEP_M PIC 9(01).
サブの側ではコール元のプログラムが、KEY-Fに何をセットしてきたかを判定して、CHANGE-FとEXCEP-Mにデータをセットしています。
メインはサブから返されたJUDGE-Fを使って引き続き処理を行います。集団項目で渡して集団項目で帰ってくるだけです。この場合、CHANGE-FとEXCEP-Mをセットするためのサブプログラムですが、作りようによって何項目でも返せます。(必要なだけ定義して集団項目にすればよいです)
集団項目を渡して、集団項目で返ってくることが
わからず、ずっと規則集と例題を見ながら悩んでいました。
定義したテーブルをそのまま渡せて、処理して戻されるのは
分かってしまえば便利に思えますね。
すばやい回答ありがとうございました。
No.2
- 回答日時:
>・戻り値を受け取るための命令
>・戻り値は1つだと思うのですが、どの変数?に返ってくるのか
>(集団項目ごと返ってくる?)
外部サブプログラム側で、リンケージセクションに書いたデータ定義体は、
呼出側のメインプログラムの引数とデータを受け渡します。(受け取るだけでなく”戻す”)
サブプログラム内の何処かで、リンケージセクションで記述しているデータ項目を
改変すれば、メインプログラム側へ引き継がれます。
データ項目が処理されてメインプログラム側に戻されるのですね。
Javaのイメージで何かで値を戻さないといけないのかと
ずっと悩んでいたので、問題が解決したので次の問題へと
進んでいけます。
回答ありがとうございました。
No.1
- 回答日時:
CALL文に戻り値などありません。
CALLで呼び出されたサブプログラム内で不具合が発生した場合、「ステータス値」を設定してサブプログラムを終了し、呼び出した側で「ステータス値」判定を行います。
通常は、処理結果が正常/異常を判定するためにLINKAGEには「ステータス」項目を用意しておきます。
すばやい回答ありがとうございます。
CALL文に戻り値はないのですね。規則集などは目を通したの
ですが、いまいち理解できなかったところなので
とても助かりました。
ステータス項目も付け足しておこうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
COBOLで文字タイプを数字タイプに変換する方法
その他(プログラミング・Web制作)
-
COBOLについて
その他(プログラミング・Web制作)
-
COBOLのINVALID KEYが理解できません
その他(プログラミング・Web制作)
-
-
4
COBOLでのNOT = の AND条件
その他(プログラミング・Web制作)
-
5
COBOL
その他(プログラミング・Web制作)
-
6
COBOL等でのHIGH_VALUEについて
IT・エンジニアリング
-
7
COBOLの基本的な事なのですが。。。
その他(プログラミング・Web制作)
-
8
COBOLの改行
その他(プログラミング・Web制作)
-
9
COBOLのCOMP形式について
その他(プログラミング・Web制作)
-
10
COBOLの連絡領域について
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで仕様書は書きますか?
-
空elseの有無
-
C言語(gcc), Linux, FTPプログ...
-
GUIプログラミングはガワを作っ...
-
超初心者用プラグラム教えてく...
-
パックマンプログラム
-
0除算して、落ちるプログラムと...
-
【JAVA】数字をひし形に出力す...
-
自動クエリとはどういうもので...
-
変数の値が勝手に変化する原因
-
あるプログラムのコマンドライ...
-
C言語のプログラミングの問題で...
-
変数(関数)名の頭に_
-
RFO BASIC
-
Notepad++の関数リスト表示でC...
-
excelのexe化について
-
正しい五十音順について
-
コンパイルできない
-
アルゴリズムとプロトコールの違い
-
65536は2の何乗なのでしょうか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで仕様書は書きますか?
-
C言語(gcc), Linux, FTPプログ...
-
プログラミングのコード量に関...
-
空elseの有無
-
変数・オブジェクト名に漢字使用
-
C++ソースからUMLの設計書を作...
-
きれいなコード vba vbaを勉強...
-
PCの時刻精度
-
VBからシャットダウンさせる方法
-
クリップボードを排他的に利用...
-
MFC,C++/CLI,C#の共存
-
逆フーリエ変換のプログラムに...
-
【VB】データグリッドビューで...
-
COBOLのCALL文がいまいちつかめ...
-
GDLでH8/3052Fのi2cプログラム...
-
プログラム動作時のCPU処理時間...
-
「ルーチン」という言葉の意味
-
例外処理があまり使われない理...
-
良いプログラムとは?
-
実行コマンドのプロセス管理
おすすめ情報