这个matlab代码在做什么?

时间:2012-02-24 00:50:43

标签: 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,...),以便所有系列都适用于所有场景。我错过了提取数据的函数,但上面的代码是否正在执行?

2 个答案:

答案 0 :(得分: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完整路径数组。

答案 1 :(得分:0)

我同意Pursuit所写的内容,但我想补充一点,你的for / switch结构有点傻。如果您有效地必须枚举所有这些,就像您在实现它时使用'switch'一样,没有理由不完全取出for / switch循环而只留下命令。一种可能的替代方案是用以下内容替换整个不必要的“开关”:

database = fullfile(datadir, ['scenario', num2str(proj)]);
相关问题