2012-02-07 7 views
0

これについていくつか助けていただきたいと思います。MATLAB - forループのシステムコマンドの出力から行列を構築する

私は以下を実行しようとしています。

forループ内では、2つのシステムコマンドを実行し、それらの2つのコマンドの出力がループの繰り返しごとに1行の行列の3つの要素を構成します。私はその後、すべての行列をExcelファイルに出力したいと考えています。

私はこれを試してみました:

for i=1:3, 
    command1 = ['fslmeants -i image1 -m example_' num2str(i) '.nii.gz' ] 
    C(i,1) = evalc('system([command1])') 
    command2 = ['fslstats example_' num2str(i) ' -V'] 
    C(i,2:3) = evalc('system ([command2])') 
end 

私は次のエラーメッセージ受信:

を???割り当ては、私は、試み

> == 8 C(I、1)= EVALC( 'システム([Command1を])')でname_of_scriptを複数の非シングルトンRHS寸法非シングルトン添字より

誤差を有しますこの

for i=1:3, 
    command1 = ['fslmeants -i image1 -m example_' num2str(i) '.nii.gz' ] 
    A = evalc('system([command1])') 
    command2 = ['fslstats example_' num2str(i) ' -V'] 
    B = evalc('system ([command2)') 
end 

システムの出力([Command1を])私はそれに行列要素を割り当てようとしていない場合、システムに対する出力

A = 

0.302714 

ans = 

0 

ある([Command2を])場合Iドン行列要素を代入しようとしないt Oそれは私は、(1,2)、Bを入力した場合

B = 

1413 19506.814453 

ans = 

0 

私は私のBの最初の番号の2番目の数字を与える

ans = 

4 

を得ることではなく、第二の数(19506.814453)として私は欲しかった。

次のようにBが文字列だった場合、私は、その後にチェック:

ischar B 

ans = 

    1 

私はシステム([Command1を])およびシステム(の出力を認識するMathWorks社のMATLABのための方法を見つけることができればだから私は推測[コマンド2 ])を、同じ行の3つの要素としてforループの繰り返しごとにソートします。

だから理想的には、行列Cの最初の行は

C(1,:) = [ 0.302714 1413 19506.814453 ] 

なり、余分な行は、forループの各反復で添加されるであろう。

誰でも紛失した魂を啓発することはできますか?

+0

'ischar B'は' ischar( 'B') 'に相当します。そのような変数を持たなくても、変数Bの内容とは独立して1を得ることができます。代わりに 'ischar(B)'を実行してください。 – yuk

答えて

1

コマンドの出力を取得するには、システムの第二の出力を使用する必要があります。function str2numを使用し、数またはマトリックスに文字列を変換するに

[~,output]=system('....'); 

を。

str2num('123') 
ans = 
    123 

str2num('1 2 3') 
ans = 
    [ 1  2  3 ] 
+0

ありがとう、それを働かせてください。とても有難い。 –

0

なぜあなただ​​けのevalcを使用せずにsystemコールの出力を収集することはありませんか?

[status, A] = system(command1); 
[status, B] = system(command2); 

出力はあなたがスプリットオプションで正規表現を使用することができ、スペースで区切られた数字の文字列の場合:

Bnum = str2double(regexp(B,' ','split')); 

(Command1をが複数の番号を返すことができる場合)あなたはAのために同じことを行うことができますか、単に文字列を数値に変換します。

Anum = str2double(A); 

その後、あなたは、単一のベクターにそれらを結合:

C(1,:) = [A, B]; 

両方のコマンドが常に同じ数の値を返すようにしてください。

+0

ありがとう、働いている。とても有難い。 –

関連する問題