1

CA の自動化ポイント製品には、rexx インタープリターが組み込まれています。CMS でオリジナルに戻る前に、他の Rexx インタープリターを使用しました。外部データ キューにアクセスして、AP rexx スクリプトを呼び出して、他の言語のプログラムからデータを取得できるようにしようとしています。現在 CA は、オブジェクト rexx や OORexx ではなく、"Milstead" (sic) rexx であることを明らかにしました。私は必要なことを行う rxqueue を実装する Neil Milsted の Uni-Rexx (あなたが読んでいるならニールの素敵な 1 つ) を使用します。

パース バージョン名 level say "rexx is " name " and " level say "rexx util is " 2008年2月

2011 年 7 月 15 日 08:27:19 rexx util は 30 です

私のgoogle-fuはここで私を失敗させており、同じWebサイトに戻ってきます.
では、この特定の Rexx と、rexx 以外のコードを実行して出力を返す方法を知っている人はいますか? 一時ファイルへの書き込みで I/O バウンドになりたくありません。

4

2 に答える 2

4

外部プログラム (実行可能プログラム) からの出力を REXX に取得したい場合は、コマンドの標準出力を外部データ待ち行列にリダイレクトする POPEN 関数を使用できます。その後、次の手順を使用してキューを操作できます。

  • pull (parse pull) - キューの先頭からデータをプルします
  • push - キューの先頭にデータを追加します
  • queue - キューの一番下にデータを追加します
  • queued - キューに残っている行の数を返します

簡単な例:

call popen ('dir /?')
lines = QUEUED()

say "Number of output lines:" lines
do i = 1 to lines
   pull line
   say "Line #"||i||":" line
end
于 2011-07-19T11:09:25.290 に答える
3

エラー診断の利点が追加された、より現代的なアプローチは次のとおりです。

cmd = 'dir /?'
address COMMAND cmd with output stem cmdout. error stem cmderr.

if cmderr.0 <> 0 then do  /* an error has occurred executing this command */   
  do i = 1 to cmderr.0
    say "Error text line" i": '"cmderr.i"'"
    end
  end
else do i = 1 to cmdout.0   /* no error has occurred so just process the output */
  say "Line #"i":'"cmdout.i"'"
  end
于 2014-02-28T19:28:47.753 に答える