Search code examples
matlabsavecell-array

Matlab - Error using save Cannot create '_' because '_____' does not exist


I have some data in a cell array,

data2={[50,1;49,1;26,1];...
    [36,2;12,2;37,2;24,2;47.3,2];}

and names in another cell array,

names2={'xxx/01-ab-07c-0fD3/0';'xxx/01-ab-07s-0fD3/6';}

I want to extract a subset of the data,

data2_subset=data2{1,:}(:,1);

then a temporary file name,

tempname2=char(names2(2));

an save the subset to a text file with

save (tempname2, 'data2_subset', '-ASCII');

But I get this error message: _

Error using save
Cannot create '6' because 'xxx/01-ab-07s-0fD3' does not exist.

To try to understand what is happening, I created a mock dataset with simpler names:

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');

in which case the save command works properly.

Unfortunately I still do not understand what the problem is in the first case. Any suggestions as to what is happening, and of possible solutions?


Solution

  • MATLAB is interpreting the the forward slashes (/) as directory separators and 6 as the intended file name (your second example doesn't have this slash problem). Since the relative directory tree xxx/01-ab-07s-0fD3/ doesn't exist, MATLAB can't create the file.

    To solve the problem, you can either create the directories beforehand using mkdir():

    >> pieces = strsplit(tempname2,'/');
    >> mkdir(pieces{1:2});
    >> save(tempname2, 'data2_subset', '-ASCII');
    

    or replace the / with some other benign symbol like _:

    >> tempname3= strrep(tempname2,'/','_');
    >> save (tempname3, 'data2_subset', '-ASCII');
    

    (which works for me).