0

コマンド プロンプトは、ソフトウェアの実行、およびレポートと出力ファイルの生成のすべての点でうまく機能します。目的の結果を含む出力ファイルを生成するには、パラメーター ファイルを使用するレポート プログラムの実行可能ファイルを実行する必要があります。たとえば、これらの手順をコマンド プロンプトで実装するとしたら、次のようになります。

“path\report.exe” –f Report.rwd –o Report.rwo

出力ファイルは Report.rwo です。このファイルには、エクスポートされた変数が含まれます。

これをMatlabで実装するために、以下は私が達成しようとしていることの要点を示す小さなスクリプトです。実行ごとにソフトウェアを呼び出し、データを抽出します。

for nr=1:NREAL

      dlmwrite(‘file.INC’,file(:,nr),’delimiter’,’\n’); % Writes the data file for each run

       system('"path\file.dat"');    % calls software
       system('"path\Report.rwd" –o "path\Report.rwo"'); % calls report

      [a,b]=textread(‘"path\Report.rwo".rwo’,’%f\t%f’); % Reads the data and store it in the variable b

end

だから私は2つの問題があります:

1) このスクリプトを Matlab で実行すると、出力ファイル Report.rwo が生成されません。したがって、「textread」関数を含む行に到達すると、ファイルが存在しないためにエラーが発生します。

2) Matlab がレポート (.rwd ファイル) を呼び出すたびに、Enter キーを押すか「q」と入力して終了するように求められます。実行するファイルが何百もあると仮定すると、ファイルごとに Enter キーを押して続行するように求められます。次の行により、プロンプトが表示されます。

system('"path\Report.rwd" –o "path\Report.rwo"'); % Calls report

古い編集:次のように、私の問題には2つの更新があります:

更新 1:上記の問題のパート 2 は、Jacob によって解決されたようです。1回の実行で問題なく動作しています。ただし、最終的な結果は、何百ものファイルを実行するプログラム全体を実行できる場合にのみ確認されます。

更新 2:次のように、コマンド プロンプトを使用してソフトウェアを実行し、出力ファイルを生成できます。

**“path\mx200810.exe” –f file.dat**
  • このコマンドは、レポート パラメーター ファイルを読み取り、出力ファイルを生成します。

    “path\report.exe” –f Report.rwd –o Report.rwo

最新の編集:

1) ソフトウェアを実行し、Return キーを押すプロンプトを回避し、次のコマンドを使用して Matlab を使用して出力ファイルを生成することができます。

system('report.exe /f Report.rwd /o Report.rwo')
system('mx200810.exe -f file.dat')

ただし、必要な .exe および .dll ファイルを .dat ファイルと同じフォルダーにコピーした後にのみ、それを行うことができました。したがって、これらすべてのファイルがある同じフォルダーから .m ファイルを実行しています。

2) ただし、Matlab のコマンド ウィンドウには、次のようなエラーが 1 つあります。

"...STOP: Unable to open the following file as data file:
              'file.dat'
              Check path name for spaces, special character or a total length greater than 256 characters

              Cannot find data file named 'file.dat'

Date and Time of End of Run: .....

ans = 0"
4

2 に答える 2

2

で囲まれた文字列は MATLAB では無効であるため、関数がどのように機能する" .. "かわかりません。system

"すべてを置き換えてから質問を更新し、以下のように引用符内に'コマンドライン引数 (例: ) を含めます。-f file.dat

  %# Calls software
  system('"path\mx200810.exe" –f file.dat'); 

  %# Calls report
  system('"path\report.exe" –f Report.rwd –o Report.rwo'); 

アップデート:

2番目の問題を解決するための安価なトリックを次に示します(qプログラムを終了するように入力します):

  %# Calls software
  system('"path\mx200810.exe" –f "path\file.dat" < "C:\inp.txt"'); 

  %# Calls report   
  system('"path\report.exe" –f "path\Report.rwd" –o "path\Report.rwo" < "C:\inp.txt"');
  1. 文字の後に改行文字を含むファイル (例: C:\inp.txt) を作成しますq。これを作成するには、メモ帳を開いて と入力qし、リターン キーを押して として保存しC:\inp.txtます。report.exeこれは、必要と思われる「入力」として機能します。
  2. system先ほど作成したテキスト ファイルからの入力がパイプされるように、コード内のすべての呼び出しを変更します。上記の変更された呼び出しを含めました (違いを確認するには、最後までスクロールしてください)。
于 2010-07-06T20:42:49.627 に答える
1

両方の出力を使用して、システム実行のステータスとテキスト結果を取得します (利用可能な場合)。

cmd_line = '“path\report.exe” –f Report.rwd –o Report.rwo';
[status, result] = system(cmd_line);

status変数に応じてスクリプトを続行します。ゼロを超えると停止します。

if (status)
    error('Error running report.exe')
end
[a,b]=textread(...

パラメーターが可変の場合、文字列連結またはSPRINTF関数を使用して、MATLAB でコマンド ライン文字列を生成できます。

于 2010-07-07T19:04:41.233 に答える