我在单元格数组中有一些数据,
data2={[50,1;49,1;26,1];...
[36,2;12,2;37,2;24,2;47.3,2];}
和另一个单元格数组中的名称,
names2={'xxx/01-ab-07c-0fD3/0';'xxx/01-ab-07s-0fD3/6';}
我想提取一部分数据,
data2_subset=data2{1,:}(:,1);
然后是临时文件名,
tempname2=char(names2(2));
使用
将子集保存到文本文件中save (tempname2, 'data2_subset', '-ASCII');
但我收到此错误消息:_
Error using save
Cannot create '6' because 'xxx/01-ab-07s-0fD3' does not exist.
为了尝试了解发生了什么,我创建了一个名称更简单的模拟数据集:
names={'12-05';'14-03'};
data={[50,1;29,1;25,1];[35,2;22,2;16,2;38,2];[40,3;32,3;10,3;44,3;43,3];};
data_subset=data{1,:}(:,1);
tempname=char(names(2));
save (tempname, 'data_subset', '-ASCII');
在这种情况下,save命令正常工作。
不幸的是,我仍然不明白第一种情况是什么问题。有关正在发生的事情和可能的解决方案的任何建议吗?
答案 0 :(得分:2)
MATLAB将正斜杠(/
)解释为目录分隔符,将6
解释为目标文件名(您的第二个示例没有此斜杠问题)。
由于相对目录树xxx/01-ab-07s-0fD3/
不存在,MATLAB无法创建文件。
要解决此问题,您可以使用mkdir()
预先创建目录:
>> pieces = strsplit(tempname2,'/');
>> mkdir(pieces{1:2});
>> save(tempname2, 'data2_subset', '-ASCII');
或将/
替换为其他一些良性符号,例如_
:
>> tempname3= strrep(tempname2,'/','_');
>> save (tempname3, 'data2_subset', '-ASCII');
(这对我有用)。