Reputation: 133
I wish to write a some information in form of a csv file from a MATLAB code.
In the MATLAB code I have stored the header as a cell array:
ToCSV={'Location' 'Weight_factor' 'Average' 'Maximum' 'Minimum'};
I append rows to this cell array by looping. A sample statement is:
ToCSV={ToCSV; {'EastLocation' 0.5 1e+3 1e+4 1e+2} };
I wish to print this as a csv file. I used following routine which sort of giving errors:
fid = fopen('outfile.csv','w');
fprintf(fid,'%s, %s, %s, %s, %s\n',ToCSV{1,:});
fprintf(fid,'%s, %f, %10.2e, %10.2e, %f\n',ToCSV{2:end,:});
fclose(fid);
>>Error using fprintf
>>Function is not defined for 'cell' inputs.
Can some of you please provide pointers to achieve this?
I also tried csvwrite
, but apparently it doesn't go well with cell arrays.
Upvotes: 2
Views: 3149
Reputation: 12689
aa=ToCSV{1,:};
bb=ToCSV{2,:};
fid = fopen('outfile.csv','w');
fprintf(fid,'%s, %s, %s, %s, %s\n',aa{:});
fprintf(fid,'%s, %f, %10.2e, %10.2e, %f\n',bb{:});
fclose(fid);
Upvotes: 1
Reputation: 30579
The problem is with the following statement
ToCSV={ToCSV; {'EastLocation' 0.5 1e+3 1e+4 1e+2} };
This makes a cell array inside a cell array so that when you index ToCSV
you get a cell array. I think you want to concatenate a row like this:
ToCSV=[ToCSV; {'EastLocation', 0.5, 1e+3, 1e+4, 1e+2} ];
or
ToCSV(end+1,:) = {'EastLocation', 0.5, 1e+3, 1e+4, 1e+2};
The commas just make it easier to read.
Upvotes: 2