Open multiple files with fopen
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have written two codes in matlab:
The first one is:
files=dir('*.csv');
for i=1:length(files)
fid(i)=fopen(files(i).name);
files(i).values=textscan(fid(i), '%f %f','delimiter',',','HeaderLines',20,'MultipleDelimsAsOne',1);
end
and the second one is:
str='C:\Users\user\Measurements\Test';
folder_name=uigetdir(str);
files=dir(fullfile(folder_name,'*.csv'));
for i=1:length(files)
fid(i)=fopen(files(i).name);
files(i).values=textscan(fid(i), '%f %f','delimiter',',','HeaderLines',20,'MultipleDelimsAsOne',1);
end
The first code is saved in the same folder as the files that I want to open. The second code is saved outside the folder where the files are stored. But both should read the same files. In the first code the structure files.values is composed by a 1x2 cell. Both cells contain a column vector with numerical values The problem arises in the second code which sometimes gives me an error because fid=-1 or the column vectors in the structure files.values are empty.
How can I overcome this problem?
0 Kommentare
Antworten (3)
Walter Roberson
am 26 Apr. 2013
Is there a reason to keep the fid's around? Often you would fclose() right after the textscan. This can be important in preventing you from running out of files.
When you do the fopen() ask for the message output. Then test the fid and if it is -1, display the message (and the file name.)
0 Kommentare
Giorgos Papakonstantinou
am 26 Apr. 2013
Bearbeitet: Giorgos Papakonstantinou
am 26 Apr. 2013
5 Kommentare
Walter Roberson
am 16 Apr. 2020
[fid(i),msg]=fopen(files(i).name);
should be
[fid(i),msg]=fopen( fullfile(folder_name, files(i).name));
Giorgos Papakonstantinou
am 26 Apr. 2013
1 Kommentar
Stephen23
am 17 Apr. 2020
Using cd should be avoided in code.
Using absolute/relative filenames is more efficient, robust, simple, and easier to debug, e.g.:
D = 'C:\Users\user\Measurements\Test';
S = dir(fullfile(D,'*.csv'));
for k = 1:numel(S)
F = fullfile(D,S(k).name);
[fid,msg] = fopen(F,'rt');
assert(fid>=3,msg)
S(k).values = textscan(fid,...);
fclose(fid);
end
Siehe auch
Kategorien
Mehr zu Other Formats 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!