结构数组生成循环Matlab

时间:2015-07-29 22:53:34

标签: matlab if-statement for-loop data-structures struct

说我有一个目录列表:

/users/david/patients/patientID/Day
/users/david/patients/patientID/Daya/HospID_x/Data
/users/david/patients/patientID/Dayb/HospID_y/Data
/users/david/patients/patientID/Dayc/HospID_z/Data
/users/david/patients/patientID/Day
/users/david/patients/patientID/Daya/HospID_x/Data
/users/david/patients/patientID/Dayb/HospID_y/Data
/users/david/patients/patientID/Dayc/HospID_z/Data
/users/david/patients/patientID/Day
.
.

数据是混合的,包含图像,矢量,文本等。我已经生成了一个文件夹列表,其中包含我想要执行操作的数据。在我的脚本中处理这些数据类型后,我在工作区中生成了一堆变量。变量将在下一个周期中被覆盖。我想创建一个包含这些变量或结果的struct文件。这意味着,患者将在患者ID下具有多个DaysID,并且在DaysID下具有不同的HospID。

1 个答案:

答案 0 :(得分:1)

好的,代码花了一些时间才下来。此外,代码在某些地方有点硬编码,所以你可能想要清理一下。主要问题是我不知道Data文件的确切格式。此外,代码不包括字段为空时超过字段Day__的情况,因为这是您呈现数据的方式。这意味着您必须做一些自定义的事情。

1) Rename the paths
2) Add if-statements for empty if needed
3) Edit the inner loop to work with your data.

代码应该足够清楚。我已经基于for循环制作了一个代码,当时你逐步降低了一个级别。我没有使用你的确切层次结构,但类似。如果这不起作用,请尝试评论和解释原因。代码,

function dummies = test()

basedir = 'C:\Users\username\Documents\MATLAB\dummies';
level1 = dir(basedir);
dummies=[];

for k = level1(3:end).'
    level2 = dir(fullfile(basedir, k.name));
    for l = level2(3:end).'
        level3 = dir(fullfile(basedir, k.name, l.name));
        if length(level3) < 3
            dummies.(k.name).(l.name) = [];
        else
            for m = level3(3:end).'
                level4 = dir(fullfile(basedir, k.name, l.name,m.name));
                for n = level4(3:end).'
                    dat = load(fullfile(basedir, k.name, l.name,m.name,n.name));
                    dummies.(k.name).(l.name).(m.name) = dat;
                end
            end
        end
    end
end 

也可以使用递归解决方案来实现它,但Matlab在递归方面不是很好,所以我在这个例子中避免使用它。