回答 - パート1:いいえ、戻り値にCALLの出力はありません。
回答 - 第2部:出力を別のオプションで取得できます。パート1のため
説明: 「返す値」は、通常の整数であり、特殊レジスタRETURN-CODE
ビアおよび/またはRETURNING
句(追加にあなたをできるようにいくつかの実装にポインタを取得)で渡さ:CALL someprog RETURNING something
、参照COBOL documentation for CALL。
パート2の説明: できることは、パイプを作成し、そこから読み取ることです.Cインターフェイスを呼び出すか、実装固有の拡張子を使用して読み込むことができます。
ACUCOBOLまたはマイクロフォーカス[と多分他人]を使用すると、ラインシーケンシャルファイルアクセスを介してパイプを使用することができます - マイクロフォーカスの詳細については、スティーブンGennardの答えとACUCOBOLため、この答えの末尾を参照してください。
UNIXの場合、CALL 'SYSTEM'
という名前のパイプを「ネイティブに」作成することができます。そこから読み取れる可能性のある方法は、GnuCOBOL FAQ -> named pipesに記載されています。一般に、パイプを作成してCインターフェイス経由で読むことができます。
Cインタフェースと、それはcobweb-pipesあるためCOBOLラッパー経由のパイプを使用するためのサンプル実装(MFはおそらく、ユーザー定義関数をサポートしています、したがって、あなたはこれをテスト場合クモの巣-pipes.cobはおそらく多かれ少なかれ変わらず(作品にお答えくださいコメント)、そうでない場合はクモの巣-CALL-pipes.cobが動作する可能性が非常に高い
編集:
SEQUENTIAL
ファイルを経由してACUCOBOLでの拡張と割り当てられたファイル名に-P
で始まる:
program-id. dircmdread.
select i-cmd
* windows:
assign to "-P %TMP% cmd.exe /c dir > %TMP%"
* unix:
* assign to "-P ls -l"
organization is sequential.
fd i-cmd.
01 i-cmd-record pic x(80).
procedure division.
open input i-cmd
perform until exit
read i-cmd
at end
exit perform
end-read
display i-cmd-record
end-perform
close i-cmd
goback.
回答にコメントを残してください - あなたはcobweb-pipeソリューションを試しましたか? はいの場合:元の 'FUNCTION'バリアントを使用できますか?' CALL'バリアントを使用する必要がありましたか?コードの変更が必要でしたか? –