write files in.csv format in separate loacation
2 ビュー (過去 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!