write files in.csv format in separate loacation
3 次查看(过去 30 天)
显示 更早的评论
Using xlsread command I read a large number of .csv files in a loop. I am using the following code to read rawdata and save the output in .csv format(should not ovewrite the existing file)
files=dir('new');
files=files(~[files.isdir]);
n=length(files);
for i=1:n
thisfile=xlsread(fullfile(files(i).folder,files(i).name));
[~,~,rawdata]= xlsread(fullfile(files(i).folder, files(i).name));
A=csvread(rawdata);
A=rawdata(2:end,4);
B=cumsum(cellfun(@double,A));
xlswrite('thisfile.csv', [{'cumulative'}; num2cell(B)], 1, 'D1');
end
However the code just saves the output of the last file in the folder. How do I get the results of n files saved as n different.csv files?
0 个评论
采纳的回答
Eric
2017-6-20
You're saving everything to 'thisfile.csv'. You need to change the filename with each iteration of the for loop. Try something like
files=dir('new');
files=files(~[files.isdir]);
n=length(files);
for i=1:n
thisfile=xlsread(fullfile(files(i).folder,files(i).name));
[~,~,rawdata]= xlsread(fullfile(files(i).folder, files(i).name));
A=csvread(rawdata);
A=rawdata(2:end,4);
B=cumsum(cellfun(@double,A));
[~, fname] = fileparts(files(i).name);
new_filename = fullfile(files(i).folder, [fname '.csv']);
xlswrite(new_filename, [{'cumulative'}; num2cell(B)], 1, 'D1');
end
This will write a CSV file of the same root filename in the same directory as the original file.
2 个评论
Eric
2017-6-21
In regards to overwriting the original files, I was thinking your original files have an extension of XLS or XLSX. I now gather that they are also CSV files. How about something like:
filename = fullfile(files(i).folder, [fname '_new.csv']);
Have you thought about using Matlab tables for this problem? At least as of a few years ago, xlsread and xlswrite both opened and closed Excel every time they are called, causing significant overhead. I went to the trouble of creating my own class for interfacing to Excel to avoid this.
I wonder if you could use readtable instead of xlsread and writetable instead of xlswrite. You could then add new parameters like median, mean, and so forth as new parameters in the table prior to calling writetable(). That might simplify your code, make it faster, and allow new data sets to easily be written.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Spreadsheets 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!