MATLAB Answers

Jan Simon

FAQ: How can I process a sequence of files?

Asked by Jan Simon
on 26 Dec 2012
Latest activity Edited by Sean de Wolski
on 29 Jul 2016

How can I process a sequence of files?

  1 Comment

Jan Simon
on 26 Dec 2012

This is a tutorial question only! There is no need to answer it and please to not vote for it. This is neither my question nor my answer, but only an example for a nicer, more convenient, more usable FAQ, which is less stuffed with commercials.



No products are associated with this question.

3 Answers

Answer by Jan Simon
on 26 Dec 2012
Edited by Jan Simon
on 19 Mar 2016
 Accepted answer

If the files that you want to process are sequentially numbered, like "file1.txt", "file2.txt", "file3.txt", etc. then you can use SPRINTF or NUM2STR to create the filename and LOAD, IMREAD, FOPEN, etc. to retrieve the data from the file. (Also note the three different ways of building the filename - you can use your favorite way.)

% Read files file1.txt through file20.txt, mat1.mat through mat20.mat
% and image1.jpg through image20.jpg.  Files are in the current directory.
for k = 1:20
  matFilename  = sprintf('mat%d.mat', k);
  matData      = load(matFilename);
  jpgFilename  = sprintf('image%d.jpg', k);
  imageData    = imread(jpgFilename);
  textFilename = sprintf('file%d.txt', k);
  fid          = fopen(textFilename, 'rt');
  textData     = fread(fid);

In the above code, matData, imageData, and textData will get overwritten each time. You should save them to an array or cell array if you need to use them outside the loop, otherwise use them immediately inside the loop.

If instead you want to process all the files whose name matches a pattern in a directory, you can use DIR to select the files. Note that while this example uses *.jpg as the pattern and IMREAD to read in the data, as with the previous example you could use whatever pattern and file reading function suits your application's needs:

myFolder = 'C:\Documents and Settings\yourUserName\My Documents\My Pictures';
if exist(myFolder, 'dir') ~= 7
  Message = sprintf('Error: The following folder does not exist:\n%s', myFolder);
filePattern = fullfile(myFolder, '*.jpg');
jpegFiles   = dir(filePattern);
for k = 1:length(jpegFiles)
  baseFileName = jpegFiles(k).name;
  fullFileName = fullfile(myFolder, baseFileName);
  fprintf('Now reading %s\n', fullFileName);
  imageArray = imread(fullFileName);
  imshow(imageArray);   % Display image.
  drawnow;              % Force display to update immediately.

Or you can try a "File Exchange Pick of the Week": FileExchange: FileFun.


This answer is a modified version of: How_can_I_process_a_sequence_of_files   [EDITED, link fixed by I.A.]

Answer by Sean de Wolski
on 31 May 2013


Jan Simon
on 31 May 2013

Somebody has accepted my answer. This has not been the intention, but of course the FAQ contain only answers worth to be accepted.

Was not me.

Nor me.

Answer by Sean de Wolski
on 29 Jul 2016
Edited by Sean de Wolski
on 29 Jul 2016

In MATLAB R2014b and newer, you can use a datastore to read a sequence of files in a load-analyze-discard manner or in one shot with the readall() command.


Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!