Importing Numerically Named Excel Files into MATLAB

2 views (last 30 days)
I have some excel files called 'd1-1.csv', 'd1-2.csv', and so on until 'd1-15.csv'. However, when these files are loaded into MATLAB, MATLAB processes the 10 through 15 files before it processes the 2 through 9 files. Is there a way to change this so that MATLAB uploads them in numeric order? Thanks.

Accepted Answer

dpb
dpb on 8 Aug 2018
Edited: dpb on 8 Aug 2018
The best solution is to not name files that way...when creating them use a format such that leading zeros are filled in the numeric fields so the lexical sort is also the numeric one...
a=1;
n=15;
for f=1:n
fn=sprintf('d%02d-%03d.csv',a,f);
csvwrite(fn,Data(:,:,f))
end
would create files
d01-001.csv
d01-002.csv
d01-003.csv
...
d01-009.csv
d01-010.csv
d01-011.csv
...
d01-015.csv
from a presumed 3D Data array by plane. Obviously use whatever data you have.
Or, read the existing files and rewrite them changing their name appropriately; that can be done in whatever order.
Or, on FEX there's a sort routine that will sort the returned names as is in natural order but I don't recall just who the submitter was at the moment.
ADDENDUM
fmti='d%dd-%d.csv'; % format to read the present file numbers
fmto='d%02dd-%03d.csv'; % format to write new file number formats
d=dir('*.csv'); % return the directory structure
for i=1:length(d) % iterate over the list
v=sscanf(d(i).name,fmti).'; % read existing numbers
fn=num2str(v,fmto); % make new filename from them
copyfile(d(i).name,fn) % copy old to new
disp(['File ' d(i).name 'copied to ' fn]) % show what did
end
Now, when certain are correct, delete the old files and then dir() will return sorted numerical order also in lexical order and "go and sin no more"... :)

More Answers (0)

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!