2017-06-14 4 views
1

私は通常インタラクティブに実行するMatlab .mファイルを持っています。私は、入力のためのインタラクティブクエリを削除するために.mファイルを書き直すことなく、一晩中いくつかの仕事をしたいと思います。以前は、OSのコマンドラインからバッチファイルを実行して、FortranやCやVBの実行ファイルでこれを行うことができました。これはMatlabでも可能ですか?プログラムの(。。また、私はMatlabのコンパイラを持っていない。しかし、私はMATLABは全体の時間を開くことができます)対話式Matlab .mファイルをバッチコールで実行する

スケルトン:

Input variable1 from keyboard; 
Input variable2 from keyboard; 
Long calculation; 
Save results to file; 
Stop 

しかし、私は、「バッチ」.mファイルを作成する場合プログラムを実行するには、次のように:

Program 
0.2 
0.47 
Program 
1.2 
2.4 

プログラムはちょうどキーボードから私の入力を待っている永遠にそこに座っています。プログラムを実行して呼び出し元.mファイルから対話型入力を取得する方法はありますか?

+0

私は以下の2つの回避策を用意していますが、回答がある場合はそれでも解決します。 – dmm

+0

注:Matlab v5では、それぞれfscanfとfprintfを使用して、それぞれキーボードとスクリーンのファイル識別子として0と1を使用できるという証拠が見つかりました。だから私は狂っていない。私は以前から私が求めていることをすることができた。 – dmm

+0

注:私はWindows OS(7)で作業しています。 – dmm

答えて

0

どの環境/オペレーティングシステムで作業していますか? Windowsで作業していると思うようになるバッチファイルを参照します。 Linuxで作業している場合は、echoコマンドを使用して結果をプログラムにパイプすることができます。例:

#my_bash_script.sh 
echo "0.2 
0.47 
" | Program 

Windowsのバッチファイルを使用している場合は、おそらく同様のことが可能です。これを1つのリソースとして確認してください: https://ss64.com/nt/syntax-redirection.html

+0

これはプログラムが実行可能であることを必要としませんか? – dmm

+0

いいえ、あなたのパスにPythonが必要です。コマンドラインでスクリプトを "python"で呼び出すか、bashスクリプトの最初の行にshebang(#!/ usr/bin/python)を含めます。 –

0

これは回避策ですが、回答ではありませんが、コメントには長すぎます。これをしばらく調べてから、私はMatlabが質問の要求を行うことはできないと思います。 (実行可能ファイルにMatlabコードをコンパイルしていないわけではありません)私は、応答の "バッチ"ファイル全体を読み込んで文字列配列として返す関数(Metaと呼ぶ)プログラムに2つの余分な入力パラメータを与えました:インタラクティブ/バッチ実行のフラグ(FlagBatch)と、バッチファイル名(BatchName)の文字列。 FlagBatchが1の場合、プログラムはMetaを使用してBatchNameを読み取り、ResponseArrayを生成します。これはProgramからの要求に対する応答を提供するために使用されます。 Kludgeyですが、プログラムの再プログラミングを最小限に抑えて動作します。 (もちろん、私はプログラムのコードにアクセスしなければならなかったが、他の誰かから実行可能ファイルがあれば、最初はこの問題がなかっただろう!)

0

もう1つの回避策。 myinput(下記参照)を定義し、の入力を置き換えるために、どこでも使用します。私の他の回避策と同じように、プログラムに2つの余分な入力パラメータを与えます:インタラクティブ/バッチ実行のフラグ(FlagBatch)とバッチファイル名(BatchName)の文字列。また、

if FlagBatch==1, fid=open(BatchName); end 

プログラムの近くにあります。このアプローチは、プログラム(およびさまざまなサブルーチン/関数)全体に数十の入力ステートメントが散在していると便利です。

function A=myinput(fileID,prompt,formatSpec,sizeA) 
% A=myinput(fileID,prompt,formatSpec); 
% Function myinput will read from either stdin (keyboard) or from a file, 
% allowing programs' inputs to be entered interactively or from a file. 
% Use it instead of Matlab's built-in functions input and fscanf. 
% fileID = file ID (fid) of the opened file, or 0 for keyboard input. 
% prompt = the prompt string (not used for file input) 
% formatSpec = string containing Matlab format spec; 
%    not used for keyboard input 
% sizeA = size of A; basically specifies how many times to use formatSpec; 
%   not used for keyboard input 
% 
% Example Uses in Program (where fid would have been set earlier): 
% NumOrcs=myinput(fid,'Enter # of orcs','%i',1); 
% MapFile=myinput(fid,'Enter filename for LotR map','s',1); 
% [Sgimli,Slegolas]=myinput(fid,'Strengths of Gimli and Legolas?','%g',2); 
% 

if fileID==0 
    if formatSpec=='%s' 
     A=input(prompt,'s'); 
    else 
     A=input(prompt); 
    end 
else 
    A = fscanf(fileID,formatSpec, sizeA); 
end 
return 
関連する問題