How to create multiple files with given one file name
2 views (last 30 days)
Show older comments
Utsav Dobhi
on 10 Jul 2020
Edited: Bjorn Gustavsson
on 15 Jul 2020
d = 'E:\\ \\ DummyFile\\';
filePattern = fullfile(d, 'Run*');
file = dir(filePattern)
n = length(file)
for k = 1:n
baseFileName = file(k).name;
FullFileName = fullfile(d, baseFileName, 'dummy.csv');
temp = readtable(FullFileName, 'ReadVariableNames' true, 'ReadRowsNames' true);
for k ==1:
x = Nan(size(temp,1), size(temp, 2), n);
rowNames = temp.Properties.RowNames;
colNames = temp.Properties.VariableNames;
end
x(:, :, k) = temp{:, :};
end
%Finding Average and Std
Avg = mean(x,3);
Standard_deviation = std(x,0,3)
index_val = 1:size(x,3) % gives 1-30 numbers bez its total 30 files
for i=1:size(x,1) %looping over 96 of rows
for j=1:size(x,2) %looping over 20 of cols
y(:) = x(i, j, :)
p = polyfit(index_val, y, 1)
slope(i,j) = p(1);
end
end
%Convert Calculation back to table format for easier display
AvgT = array2table(Avg, 'VariableNames', colNames, 'RowNames', rowNames);
StdT = array2table(standard_deviation, 'VariableNames', colNames, 'RowNames', rowNames);
SlopeT = array2table(slope, 'VariableNames', colNames, 'RowNames', rowNames);
%I want to create a AvgT, StdT, and SlopeT files with given a one output file name, how should I do that? for example, when i give a file name output.csv then it will automattically create three output files as Output_AvgT.csv, Output_StdT.csv, and Output_SlopeT.csv
% Ask for the name of the file that the user wants to save.
startingFolder = d
defaultFileName = fullfile(startingFolder, '*.*');
[baseFileName, folder] = uiputfile(defaultFileName, 'Specify a file');
if baseFileName == 0
% User clicked the Cancel button.
return;
end
fullFileName = fullfile(folder, baseFileName)
% Open file for writing.
fid = fopen(fullFileName, 'wt');
if fid ~= -1
% Was able to open it successfully, now write stuff into it.
writetable(AvgT, fullFileName, 'Delimiter', ',', 'WriteRowNames', true);
writetable(StdT, fullFileName, 'Delimiter', ',', 'WriteRowNames', true);
writetable(SlopeT, fullFileName, 'Delimiter', ',', 'WriteRowNames', true);
fclose(fid);
else
errorMessage = sprintf('Error opening %s for output.', fullFileName);
uiwait(errordlg(errorMessage));
end
0 Comments
Accepted Answer
Bjorn Gustavsson
on 10 Jul 2020
I'd do something like this:
fn = '/some/where/output.csv';
[pth,nmn,ext] = fileparts(fn);
nnmn = fullfile(pth,[nmn,'_std',ext]) % just make sure that ext comes with a leading '.'
That should give you the idea.
For more elaborate namings you can obviously use sprintf to include numbering and whatnot.
HTH
2 Comments
Bjorn Gustavsson
on 15 Jul 2020
Edited: Bjorn Gustavsson
on 15 Jul 2020
Should be just as simple as modifying thefilename assignment for the three different filenames you want:
nnmn1 = fullfile(pth,[nmn,'_stdT',ext]);
nnmn2 = fullfile(pth,[nmn,'_avgT',ext]);
nnmn3 = fullfile(pth,[nmn,'_SlopeT',ext]);
More Answers (0)
See Also
Categories
Find more on Tables in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!