说我有一个目录列表:
/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。
答案 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在递归方面不是很好,所以我在这个例子中避免使用它。