2012-01-05 28 views
3

Matlabで使用するために大きなテキストファイルをバイナリに変換するPerlスクリプトを呼び出すmatlab関数があります。 Perlスクリプトの詳細についてはこちらをご覧ください:Parsing unsorted data from large fixed width textMatlabのPerlスクリプトからリアルタイムで出力を表示

私のMATLAB関数はperlスクリプトでは、このようなもの

function convertMyData(dataFileName) 

%Do some checks on the data 
disp('Done Checking Stuff!'); 

%Process data file with Perl 
perl('myPerlScript.pl',dataFileName) 

% More Processing on the Binary output from Perl 
disp('All Done!'); 

に見える、それは変換に数分かかることができるので、スクリプトの進行状況を示すいくつかのprint文です。このような何か:

while ($line = <INFILE>) { 
    if ($lineCount % 100000 == 0){ #Display Progress every 100,000 lines 
     print "On Line: ".$lineCount."\n"; 
    } 
    #PROCESS LINE DATA HERE 
    $lineCount ++; 
} # END WHILE <INFILE> 
print "Finished Reading: ".$lineCount." Lines\n"; 

問題は、MATLABでの私のすべてのことです:スクリプトが完了代わりに、実際のMatlabのdisp()のようなプロンプトが表示後「オンラインXXXXX」print文はちょうど、MATLABのデフォルトans変数にダンプを取得関数。

したがって、実行中にMatlabプロンプトに外部プログラムの出力が表示されるのはどうですか(可能な場合)。

答えて

2

私はあなたがそれを行うことはできないと思います。 MATLABはコントロールをperlインタプリタに渡し、結果を返すだけです。

私のために働く回避策が1つあります。最初にlocal $|=1;をperlスクリプトの中に追加して、STDOUT autoflushをオンにします。 STDOUTに出力する前。 (例えば、バッファをフラッシュの詳細についてはhereを参照してください。)次にsystem機能を使用してPerlを呼び出す:あなたのperlインタプリタがスペースを含むパスに配置されている場合

system(['"path_to_perl\perl.exe" test.pl ' dataFileName]); 

二重引用符が重要です。

1

組み込みのperlコマンドを試してみてください。 perlインタプリタを実行し、結果を返します。私はあなたの出力をresultという名前の変数に入れる必要があると思います。ドキュメントから

:= perlの(...)

結果が試みられたPerlの結果が生じると呼んで返します。

0

私も同様の問題があり、gooleがあなたの質問に私を導いてくれます。

最後に、私は次のMATLABコードを使用していますので、私の問題を解決してください。

cmdString = 'start /WAIT '; 
cmdString = [cmdString 'C:\Strawberry\perl\bin\perl extract_tti_trace.pl "' fullname '"']; 
dos(cmdString) 
関連する問題