2012-02-24 137 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 

導致的完整路徑個別文件1×40陣列。

0

我同意Pursuit所寫的內容,不過我想補充一下,你的for/switch結構有點傻。如果你必須枚舉所有這些,就像你使用「switch」一樣,沒有理由不完全去掉for/switch循環,而只是留下命令。一種可能的替代方案是將整個不必要的「開關」替換爲:

database = fullfile(datadir, ['scenario', num2str(proj)]);