write files in.csv format in separate loacation

3 vues (au cours des 30 derniers jours)
Daphne Mariaravi
Daphne Mariaravi le 20 Juin 2017
Commenté : Eric le 21 Juin 2017
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?

Réponse acceptée

Eric
Eric le 20 Juin 2017
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 commentaires
Daphne Mariaravi
Daphne Mariaravi le 21 Juin 2017
@Eric it works well but it overwrites my original files. Could that be sorted? Also this line works for writing one set of values(cumulative sum) in a dedicated column.
xlswrite(new_filename, [{'cumulative'}; num2cell(B)], 1, 'D1');
What if I need to write more parameters like median, mean etc in separate columns?
Eric
Eric le 21 Juin 2017
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.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by