UNIX上で、COBOLプログラムからShellを起動したいのですが、その方法が判りません。
CALL文を使うのかな?と思ったのですが、翻訳時にLinkエラーになってしまいます。
その時書いた文 => CALL "TEST.sh"
ひょっとして、出来ないのでしょうか?
COBOLが詳しくないので、単純に書き方が悪いのかも知れませんが...

申し訳ありませんが、ご教授願います。

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

A 回答 (2件)

メーカ系SEです。


プログラマではないので、コーディング等細かいことは言えませんが、私のプロジェクトではこのようにしています。

(1)C言語のサブルーチンでsystem()とかいう関数でスクリプトを実行。
(2)このサブルーティンをCOBOLからCALLする。

これじゃだめですかね?
    • good
    • 0

コンパイラでリンク定義する事で可能と思います。


(静的リンク定義にすればいいと思います。)
又、COBOLはJCLというもので起動されるので、JCLで記述する事ができる方法もあるのでは?

※昔、開発でサブルーチンがC言語で作成され、
 メインプログラムがCOBOL言語という環境で仕事をした事があります。
 ただ、かなり昔なのでどう対処したか記憶が薄くなっています。
 錯誤の回答の場合はご容赦下さい。
    • good
    • 0

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

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

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

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

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

いつもお世話になっています。
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.

いつもお世話になっています。
WINDOWSでCOBOL85を使いながら、COBOLの勉強をしています。
JAVAを基本情報試験のために勉強したくらいの初心者です。
シーケンシャルファイルでマッチング処理を行う、
小さなプログラムを課題としている途中、
CALL文を使ってサブプログラムを作ってみてくださいと言われました。

そこで質問なのですが、
メインプログラムの集団項目をUSING指定で引数として、
サブプログラムで受け取り、処理をするまではいいのですが、
戻り値をどのようにして受け取ればいいのかが
...続きを読む

Aベストアンサー

メインからは
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をセットするためのサブプログラムですが、作りようによって何項目でも返せます。(必要なだけ定義して集団項目にすればよいです)

メインからは
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に何をセットしてきたかを...続きを読む

QCOBOLのCALL文について

普段ほとんどCOBOLには触らないCOBOL初心者です。暇つぶしに業務のCOBOLソースを読んでいたら下記のような記述があったのですが、REFERENCEとVALUEが何を意味しているのかよくわかりません。

CALL "abc" USING AAA
REFERENCE BBB
VALUE CCC

http://www.tsh-world.co.jp/sp/support/manual/V701html/gtman3/gt3_163.htm
上のサイトなどで調べたところ、CALL文にはBY REFERENCEやBY VALUEなどが続く事があるようですが、それとは微妙に異なる気がします。それはBY REFERENCEは参照渡し、BY VALUEは値渡しを指定しているという認識ですので、2つを同時に指定するのはありえないという考えからです(BYの記述がないのも気になりますが)。
何かわかる方おりましたらご教示お願いします。
情報が足りなければ、その旨書いて頂ければ補足いたします。(といっても手元にソースがなかったり)

普段ほとんどCOBOLには触らないCOBOL初心者です。暇つぶしに業務のCOBOLソースを読んでいたら下記のような記述があったのですが、REFERENCEとVALUEが何を意味しているのかよくわかりません。

CALL "abc" USING AAA
REFERENCE BBB
VALUE CCC

http://www.tsh-world.co.jp/sp/support/manual/V701html/gtman3/gt3_163.htm
上のサイトなどで調べたところ、CALL文にはBY REFERENCEやBY VALUEなどが続く事があるようですが、それとは微妙に異...続きを読む

Aベストアンサー

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

Qcobol サブルーチンのlink

cobol言語プログラミングでの質問です。
サブルーチンで 【ダイナミックLINK】と【スターティックLINK】というのがあるようですが、どのような違いがあるのでしょうか?今、私の認識は以下の通りなのですが正しいでしょうか??→例えば、ダイナミックはサブルーチンを修正し、コンパイル完了するとメインをコンパイルしなくてもサブルーチンの修正が反映される。スターテックはサブルーチンを修正し、コンパイル完了してもメインをコンパイル完了するまではサブルーチンの修正が反映されない。どうでしょうか????

Aベストアンサー

ちょっと惜しいです。
スタティックリンクは、メインルーチンとサブルーチンが一体化されてリンクされて1つのモジュールになっています。サブルーチンを修正&コンパイルしたら、メインルーチンと再リンクが必要です。
ダイナミックリンクは、メインルーチンとサブルーチンが別々にリンクされそれぞれ独立したモジュールになっています。サブルーチンを修正&コンパイルしたら、サブルーチンの再リンクが必要ですが、メインルーチンを再リンクする必要はありません。

多くのメインルーチンで使われているサブルーチンを修正した場合、スタティックリンクだと多くのメインルーチンの再リンクが必要ですが、ダイナミックリンクだと不要です。

QCOBOLでSHELLを作成することは可能ですか?

一度質問したのですが、何故か反映されていないみたいなので再度質問させていただきます。
これは又聞きなんですがCOBOLでSHELL自体を構築することは可能なんでしょうか?
私はCOBOLに関しては全くの初心者でSHELLに関してはCシェル又はBシェルの概略ぐらいしかわかりません。
この話の信憑性を問う意見がありましたので詳しい方がいれば教えてください。

Aベストアンサー

SHELLにどういった機能を持たすかにもよりますが可
能です。
昔はCOBOL上でBASICのソースプログラムをよく動かしたものです。
その逆もありです。BASIC上でCOBOLを動かす。

QDOS上で、UNIXのShellに代替されるものってありますか?

あるPCから別のマシンにftpを使ってファイルを転送するのですが、作業者(ファイル転送をする人)がftpコマンドなどが使えないため、
パソコンのDOS画面(コマンド実行)から、キーをひとつたたけば、ファイル転送してくれる仕組みをつくりたいのです。(ファイル名は固定のものが数個。転送するのは1ファイル単位でまとめての転送はしない)
UNIX上ならftpコマンドを発行するシェルを作れば済むと思うのですが、DOS上ではどうなのでしょうか?
UNIXのシェルのようなものはあるのでしょうか?

Aベストアンサー

> UNIXのシェルのようなものはあるのでしょうか?
文脈からするとシェルスクリプトのような気がしますが、これはDOSの場合ではバッチファイルが相当します。
シェルスクリプトと比べるとかなり貧相ですけどね。
Win上のDOS窓ならVBスクリプトなども使えます。

バッチファイルでftpの自動化をしたい場合は、実行したいコマンドを羅列したテキストファイルを用意して、ftp -s:の後にそのファイルを指定すれば、勝手に実行されます(これはバッチファイルというよりftpコマンドの機能ですけど)。
「ftp -s:ファイル名」と書かれたバッチファイルを用意しておけば、コマンド一発で転送できるようになります。
http://www.atmarkit.co.jp/fwin2k/win2ktips/270ftpscript/ftpscript.html

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/270ftpscript/ftpscript.html


このカテゴリの人気Q&Aランキング

おすすめ情報