You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
How to read in a file automatically through loop?
4 views (last 30 days)
Show older comments
Hello everyone!
I need your help in finding a way to read in a a file each iteration.
My Folder looks like that:
and I want that each time it reads the file in order.
For example, for j=1--> reads in the first file
for j=2--> reads in the second file
.....and so on.
Until now, I used to read in the files every time manually,but I would like if my script could do it on its own to save time.
I appreciate any help :)
12 Comments
Ted Shultz
on 22 Aug 2019
Edited: Ted Shultz
on 22 Aug 2019
fileList = ls ('*.mat')
you can then loop over the list you get.
Walter Roberson
on 22 Aug 2019
You might want "natural file sort" from the File Exchange if you have more than 10 files, as otherwise Marker10 can end up being listed right after Marker1
Ifigenia Aslanidou
on 23 Aug 2019
Hey,
Thanks a lot for your answers!
I forgot to mention , that my measurements are in a subfolder in my original folder(where all the other scripts are).
So after listing my .mat files I get a char variable. How do I go on?I am not really experienced in Matlab :/
@Walter Roberson: I don't think I will exceed the 10 files, so I guess that won't be a problem.
Stephen23
on 23 Aug 2019
@Ifigenia Aslanidou : Note that ls is intended for displaying in the command window, it is not very practical for using within code. For processing filenames using code you should use dir, exactly as the MATLAB documenation recommends (check the examples):
You might like to check the many examples here:
Ifigenia Aslanidou
on 23 Aug 2019
Hello!Thanks for you answer! So thats what I wrote:
path = 'C:\Users\aslan\OneDrive\Desktop\Studienarbeit 2019\Messungen'; %my path
measureFiles = dir(fullfile(path,'\*.mat')); %Putting all files together in a variable
numfiles = length(measureFiles);
mydata = cell(1, numfiles);
mydata{j} = read(measureFiles(j));
But the 'read ' line is wrong.
MeasureFiles is a struct. How do I read in the files from it?
Stephen23
on 23 Aug 2019
Edited: Stephen23
on 23 Aug 2019
"How do I read in the files from it?"
As the dir documentation explains, that structure array contains the filenames (and other file meta-data), you can access the filenames using the name field, e.g. the k-th name is:
S(k).name
You will need to add the subfolder to that filename using fullfile. To actually import the file data you will need to pick a suitable function (for .mat files load is the function to use):
P = 'C:\Users\aslan\OneDrive\Desktop\Studienarbeit 2019\Messungen'; % Do NOT use "path" !
S = dir(fullfile(path,'*.mat')); % do NOT write the separator.
for k = 1:numel(S)
F = fullfile(P,S(k).name);
T = load(F);
... do whatever with the structure T
end
See also:
Ifigenia Aslanidou
on 23 Aug 2019
Thanks!
The measurements are loading,but the Array that is in it wont be read in :/
I get an error that says 'Undefined function or variable 'OUTPUT' '
Stephen23
on 23 Aug 2019
Edited: Stephen23
on 23 Aug 2019
"I get an error that says 'Undefined function or variable 'OUTPUT' '"
Without seeing your code I have no idea what you are doing. Possibly you need to access the output field of the structure that you load-ed.
T = load(...);
OUTPUT = T.OUTPUT;
If that does not resolve your issue, then you need to show the exact code that you are using, and also give the complete error message. That means all of the red text.
Walter Roberson
on 23 Aug 2019
Also show the result of
whos('-file', 'C:\Users\aslan\OneDrive\Desktop\Studienarbeit 2019\Messungen\201804_A81)001_Marker1_30s_16*_943hPa_pp.mat')
(repair the file name if I made a typing mistake; the font is somewhat small and I am not certain I got all of the characters correct.)
Ifigenia Aslanidou
on 25 Aug 2019
The OUTPUT=T.OUTPUT doesnt work.. It runs the first loop and then an error comes :
''Dot indexing is not supported for variables of this type.
Error in Inputs_I_Lp_IfigeniaAslanidou (line 13)
F = fullfile(P,S(j).name); ''
My code looks like that:
clear all;
%% Pre-allocate the variables that will save ALL of the data
Preallocating_variables_save_all_data;
P = 'C:\Users\aslan\OneDrive\Desktop\Studienarbeit 2019\Messungen';
S = dir(fullfile(P,'*.mat'));
for j=1:numel(S)
%------------------------------INPUTS---------------------------------%
% Datei einlesen (Array "OUTPUT")
F = fullfile(P,S(j).name);
T = load(F);
OUTPUT = T.OUTPUT;
......%some measurements and plots
end
After using whos I get this :
Ifigenia Aslanidou
on 25 Aug 2019
I realised whichmight be causing the trouble: the S returns a Matrix : N x 6 instead of the measurements list..(struct)
Ifigenia Aslanidou
on 25 Aug 2019
Ok now it worked!
Script:
clear all;
%% Pre-allocate the variables that will save ALL of the data
Preallocating_variables_save_all_data;
P = 'C:\Users\aslan\OneDrive\Desktop\Studienarbeit 2019\Messungen';
D = dir(fullfile('Messungen','*.mat')); %I dont know what the problem was because with S... instead of D it caused the troubles, when I ran it was a matrix,when I typed it it in command it... was a list
for j=1:6
%------------------------------INPUTS---------------------------------%
% Datei einlesen (Array "OUTPUT")
F = fullfile('Messungen',D(j).name); %replaced P with 'Messungen' (how the meas. file is... named after
T = load(F);
OUTPUT = T.OUTPUT;
Answers (0)
See Also
Categories
Find more on Search Path in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)