• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COBOLのCALL文について)

COBOLのCALL文のREFERENCEとVALUEとは?

このQ&Aのポイント
  • COBOLのCALL文について初心者がわからない部分がある。REFERENCEとVALUEの意味がわからない。
  • CALL文にはBY REFERENCEやBY VALUEという指定があるが、REFERENCEとVALUEは微妙に異なる。
  • 参照渡しと値渡しの両方を指定することはありえない。CALL文の仕様を詳しく調べてみたい。

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

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

COBOLの文法をよく読んでください。 >2つを同時に指定するのはありえないという考えからです 引数毎にBY REFERENCE、BY VALUEが指定できます。 >CALL "abc" USING AAA >REFERENCE BBB >VALUE CCC 引数がAAA、BBB、CCCの3個で、 AAAはBY句が省略されているので、BY REFERENCE BBBはREFERENCEなので、BY REFERENCE CCCはVALUEなので、BY VALUE です。 マニュアル読めばすぐに分かること。

参考URL:
http://software.fujitsu.com/jp/manual/manualfiles/M050003/B1WW6981/01/cobrw.pdf
Shiketa
質問者

お礼

引数ごとに渡し方を指定しているというところが盲点でした。マニュアルはななめ読みぐらいはしたのですが、色々と不明点や思い込みがあり、理解が及びませんでした。適切な回答をいただきとても助かりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

JIS を確認できていないのでちょっとアレなところがありますが.... COBOL には「文法上書かなければならない語句」と「省略してもかまわない語句」とがあります. ここでの BY は「省略してもかまわない語句」であり, 従って BY REFERENCE と REFERENCE とは同義 (VALUE と BY VALUE も同義) です. 今の場合引数は AAA, BBB, CCC の 3つで AAA は省略時解釈による渡し方 (なんだろ? BY REFERENCE かな?), BBB は BY REFERENCE, CCC は BY VALUE で渡すことになります.

参考URL:
http://www16.plala.or.jp/hiyokogumi/dic/a_call.html
Shiketa
質問者

お礼

BYは省略してもよかったんですね。それとお恥ずかしい話ですが引数を複数渡しているという発想がありませんでした。。。とてもためになりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • COBOL API 初期フォルダを指定する方法

    COBOL で Windows APIでフォルダの選択を表示しましたが、 初期フォルダを指定する方法がわかりません。どなたか教えて下さい。 COBOLは富士通 NetCOBOLです。 コールバック関数をどうやって記述したらよいのかわかりません。 MOVE LOW-VALUE TO browseinfo. MOVE ハンドル TO hwndOwner. MOVE 17 TO pidlRoot MOVE LOW-VALUE TO lpszTitle-VALUE. STRING "フォルダを選択してください。" DELIMITED BY INTO Title-VALUE. MOVE FUNCTION ADDR(lpszTitle-VALUE) TO lpszTitle. COMPUTE ulFlags = H"01" + H"02" + H"04" + H"4000" MOVE LOW-VALUE TO lParam-VALUE. STRING "D:\CSVLOAD" DELIMITED BY SIZE INTO lParam-VALUE WITH POINTER X. MOVE FUNCTION ADDR(lParam-VALUE) TO lParam. DISPLAY "ulFlags = " ulFlags. CALL "SHBrowseForFolderA" WITH STDCALL LINKAGE USING BY REFERENCE browseinfo RETURNING pID . DISPLAY "SHBrowseForFolderAのReturnValue = " pID IF pID NOT = 0 CALL "SHGetPathFromIDList" WITH STDCALL LINKAGE USING BY VALUE pID BY REFERENCE pszPath RETURNING ReturnValue DISPLAY "SHGetPathFromIDListA = " ReturnValue DISPLAY " pszPath = " pszPath DISPLAY "pszDisplayName-VALUE = " pszDisplayName-VALUE END-IF.

  • 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.

  • 並び替えで教えて下さい。

    並べ替えで悩んでます。ご教授下さい。 下記のようなA、B、Cというフィールドがあり それぞれデータが入っているとします。 取得する際の並び替えですが、 A B C --------------------- aaa 1 6 bbb 1 5 ccc 1 4 aaa 2 4 bbb 2 6 ccc 2 5 ORDER BY Aとすると・・・ aaa 1 6 aaa 2 4 bbb 1 5 bbb 2 6 ccc 1 4 ccc 2 5 ORDER BY Bとすると・・・ aaa 1 6 bbb 1 5 ccc 1 4 aaa 2 4 bbb 2 6 ccc 2 5 ORDER BY Cとすると・・・ aaa 2 4 ccc 1 4 bbb 1 5 ccc 2 5 aaa 1 6 bbb 2 6 となります。 私がやりたいのは下記の順で並べ替えしたいのです。 ccc 1 4 ccc 2 5 bbb 1 5 bbb 2 6 aaa 1 6 aaa 2 4 つまりORDER BY B、Cの結果の1つ目のレコードの AでGROPE BYするような感じです。 方法をご教授頂きたいと思います。 よろしくお願いします。

  • MySQLで項目の反復定義(COBOLでいうところのOCCURS)はあ

    MySQLで項目の反復定義(COBOLでいうところのOCCURS)はありますか? 今は AAA1 varchar(10) not null BBB1 int(6) not null CCC1 int(2) not null AAA2 varchar(10) not null BBB2 int(6) not null CCC2 int(2) not null  :  : AAA30 varchar(10) not null BBB30 int(6) not null CCC30 int(2) not null みたいに書いています。 XXX OCCURS 30 AAA varchar(10) not null BBB int(6) not null CCC int(2) not null のような書き方があればと思ったのですが。。 ご存知の方いらっしゃいましたら、 また他に良い方法をご存知の方いらっしゃいましたら ご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • select文の表示結果を置き換える

    sql初心者です、皆様ご教授お願いいたします。 以下のようなselect文の結果が・・・ select aaa,bbb,ccc from XXX order by aaa 以下のようになった場合・・・ 埼玉 100 AAA 東京 200 BBB 東京 200 CCC 東京 300 CCC 千葉 400 CCC 以下のような表示を行う事はsqlで可能でしょうか? 埼玉 100 AAA 東京 200 BBB (〃)(〃) CCC (〃) 300 (〃) 千葉 400 (〃) つまり「一つ前のレコードと同じ結果だった項目は”〃”等の任意の文字列を出力する」です。 宜しくお願いいたします。

  • ソースの置換えを効率的に行う方法

    ソースの置換えについてです。Dreamweaver4を使っております。 以下のようなソースがあり、AAA1、BBB1、CCC1の部分をすべて数字なしのアルファベットのみ(AAA、BBB、CCC)にしたいのです。 置換えたい箇所は1000個近くあり実際は数字もアルファベットも、もっと多くの種類があるので、一つずつ置換え設定をするのではなく、なるべく一度で出来るような方法で置換えで行いたいのですがどのように設定したらよいでしょうか。 私の理想としては "AAA*"のような形で*にはどのような文字列が入っていても対応できるような方法があれば・・・と思っているのですが。 <input type="radio" name="XXX" value="AAA1"> <input type="radio" name="XXX" value="BBB1"> <input type="radio" name="XXX" value="CCC1"> <input type="radio" name="ZZZ" value="AAA2"> <input type="radio" name="ZZZ" value="BBB2"> <input type="radio" name="ZZZ" value="CCC2"> Dreamweaver以外の方法でも構いませんのでよろしくお願い致します。

    • ベストアンサー
    • HTML
  • 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); } --------------------------------------------------

  • 要素名を表示させたい

    <data>   <aaa xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </aaa>   <bbb xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </bbb>   <ccc xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </ccc> </data> 上のようなXMLから、XSLのvalue-ofなどを使って、 要素名aaa、bbb、cccを表示させるにはどう記述すればいいのでしょうか?

    • ベストアンサー
    • XML
  • ある条件を持たないレコードの抽出

    下記のようなデータがあります。 col1 col2 ========== 001 AAA 001 BBB 001 CCC 002 AAA 002 CCC 003 BBB 003 CCC 004 AAA col2 にBBB を持たないレコードを抽出したいのですが どのようにSQLを記述すればよいかご教授ください。 得たい結果 002 004 どうぞよろしくお願いいたします。

  • 副問い合わせのinsert文

    いつもお世話になっています。 insert文の副問い合わせのことでお聞きしたいのですが、 ■通常のinsert文 insert into AAA values(aaa,bbb,ccc); 上記のsqlを副問い合わせにした場合(aaaに別テーブルからの検索結果を入れたい場合)どういうSQL文になるでしょうか。 参考書等を参照すると、副問い合わせの場合はvaluesを省略する(使えない?)と記述がありました。 insert into AAA values ( aaa IN (SELECT bbb from BBB where ccc = ddd),bbb,ccc); とはできないみたいですので… どうかご教授宜しくお願いします。

このQ&Aのポイント
  • ブラザーMFC-J6983CDWの送信ができないトラブルについて相談します。
  • 受信はできるが送信ができないというエラーメッセージが表示されます。
  • 現在使用している環境はMacBookで無線LANに接続しています。光回線を利用しています。
回答を見る

専門家に質問してみよう