Reading Multiple CSV Files in a Sequence
49 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Usama Al-Saffar
am 16 Feb. 2023
Kommentiert: Usama Al-Saffar
am 16 Feb. 2023
I wrote a code to read and process 55 csv files.
The first step was to read the data and save it in a cell structure in away that each csv file would be saved in a cell a table:
d=dir('*.csv'); % list all csv files in working directory
n = length(d); % number of files in the directory
tempdata=cell(1,n); % preallocate a cell array to hold results
for i=1:n
tempdata{i}=readtable(d(i).name); % read each file
end
I expected that the 1st. csv file will be stored in tempdata{1,1}, 2nd in cell tempdata{1,2}, etc.. but I noticed that:
tempdata{1,1} = file1.csv
tempdata{1,2} = file10.csv
tempdata{1,3} = file11.csv
.
.
tempdata{1,12} = file2.csv
.
.
How can I change the sequence of saved files so:
tempdata{1,1} = file1.csv
tempdata{1,2} = file2.csv
tempdata{1,3} = file3.csv
.
.
tempdata{1,10} = file10.csv
.
.
tempdata{1,55} = file55.scv
Appreciate the time and efforts that you put to answer this question.
0 Kommentare
Akzeptierte Antwort
Mathieu NOE
am 16 Feb. 2023
hello
that's the Achille heel of the native dir command
it will not sort the file names correctly
my example below :
%% read multiple files
P = pwd; % currrent directory
S = dir(fullfile(P,'*.csv')); % get list of files in directory
S = natsortfiles(S); % sort folders / file names into order (https://fr.mathworks.com/matlabcentral/fileexchange/47434-natural-order-filename-sort)
for k = 1:numel(S);
F = fullfile(P, fileNames_sorted{k});
S(k).data = csvimport(F); % or READTABLE or whatever.
end
% Take a look in the structure S: it contains all of your file data and the corresponding filenames, just as you require.
% For example, the 2nd filename and its data:
S(2).name
S(2).data
% Accessing and processing this will be much simpler than messing around with dynamically named variables.
4 Kommentare
Stephen23
am 16 Feb. 2023
Bearbeitet: Stephen23
am 16 Feb. 2023
"It looks logical to me but Matlab doesn't recognize the natsortfiles function! "
You need to download the function. File Exchange is a forum for third-party code that is not part of MATLAB.
Open the link that Mathieu NOE gave you. Click on the big blue Download button in the top right corner. Save the ZIP file on your computer. Unzip the zip file into the current MATLAB directory (or on the MATLAB path).
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu File Operations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!