2012-02-24 6 views
0

は、私は、MATLABがかなり新たなんだと、この次のコードを書いた:これは私の最初の時間は、スイッチを使用しているこのmatlabコードは何をしていますか?

datadir=('/.../prod/balanceSheet/DB/'); 

seriesnames = {'a.m','b.m','c.m','d.m','f.m','g.m','h.m','i.m'}; 

for proj=1:5; 
database=''; 
switch proj 
    case 1 
    database=strcat(datadir,'scenario1'); 
    case 2 
    database=strcat(datadir,'scenario2'); 
    case 3 
    database=strcat(datadir,'scenario3'); 
    case 4 
    database=strcat(datadir,'scenario4'); 
    case 5 
    database=strcat(datadir,'scenario5'); 
end; 

database; 
gooddatanames={}; 
a=length(seriesnames); 
for i=1:a 
    gooddatanames={gooddatanames,database,seriesnames(i)}; 
end 
end 

。基本的に私がしようとしているのは、すべてのシリーズがすべてのシナリオの対象となるようなデータベース(1,2,3、...)からシリーズを取ることです。私はデータを取得する関数がないのですが、上記のコードは意図した通りですか?

答えて

1

変更:

gooddatanames={gooddatanames{:},database,seriesnames{i}}; 

gooddatanames={gooddatanames,database,seriesnames(i)}; 

とループのgooddatanames = {}外を移動し、それがフォルダを交互に1x80セルアレイを生成することである、私はあなたが期待する何を考えていファイル名。


それどころか、このようないくつかのより多くの変更、行います

datadir=('/.../prod/balanceSheet/DB/'); 

seriesnames = {'a.m','b.m','c.m','d.m','f.m','g.m','h.m','i.m'}; 
gooddatanames={}; 

for proj=1:5; 
    database=''; 
    switch proj 
     case 1 
      database=fullfile(datadir,'scenario1'); 
     case 2 
      database=fullfile(datadir,'scenario2'); 
     case 3 
      database=fullfile(datadir,'scenario3'); 
     case 4 
      database=fullfile(datadir,'scenario4'); 
     case 5 
      database=fullfile(datadir,'scenario5'); 
    end; 

    for i=1:length(seriesnames); 
     gooddatanames{end+1} = fullfile(database,seriesnames{i}); 
    end 
end 

個々のファイルへのフルパスの1x40配列になります。

0

Pursuitが書いたことに同意しますが、あなたのfor/switch構造がちょっとばかだと付け加えたいと思います。あなたが効果的にそれらのすべてを列挙しなければならない場合、あなたが実装したように 'スイッチ'で行うように、for/switchループを完全に取り除かずに、コマンドで自分自身を残す必要はありません。可能な代替手段の1つは、不要な「スイッチ」全体を次のものに置き換えることです。

database = fullfile(datadir, ['scenario', num2str(proj)]); 
関連する問題