フィルターのクリア

How do I use an array of files?

19 ビュー (過去 30 日間)
Daniel Jednorozec
Daniel Jednorozec 2012 年 3 月 26 日
I have this code below which I am trying to make an array of files to use in a loop so I don't have to rewrite the same code over and over again, but when I use this method the array only pulls the first letter of the file name making it impossible to access that file. The fname array is the one I am trying to specify, but when I make it a string array it does not recognize the names as a file. Thanks in advance.
L = 50.8; %Support Span as measured in mm.
b = 24.75; %Width of rock as measured in mm.
d = 10.2; %Thickness of rock as measured in mm.
fname = ['Specimen_RawData_1.xls','Specimen_RawData_2.xls',...
'Specimen_RawData_3.xls','Specimen_RawData_4.xls',...
'Specimen_RawData_5.xls','Specimen_RawData_6.xls',...
'Specimen_RawData_7.xls','Specimen_RawData_8.xls',...
'Specimen_RawData_9.xls','Specimen_RawData_10.xls',...
'Specimen_RawData_11.xls','Specimen_RawData_12.xls',...
'Specimen_RawData_13.xls','Specimen_RawData_14.xls',...
'Specimen_RawData_15.xls','Specimen_RawData_16.xls',...
'Specimen_RawData_17.xls','Specimen_RawData_18.xls',...
'Specimen_RawData_19.xls','Specimen_RawData_20.xls',...
'Specimen_RawData_21.xls','Specimen_RawData_22.xls',...
'Specimen_RawData_23.xls','Specimen_RawData_24.xls',...
'Specimen_RawData_25.xls'];
for i = 1:25
a = xlsread(fname(i));
x = a(:,3);
y = a(:,4);
[ra,ca,va] = find(y > i);
ta = ra(1);
[rb,cb,vb] = find(y > i - 10);
tb = rb(1);
m = ((y(ta)-y(tb))/(x(ta)-x(tb)))/1e3
E = ((L^3)*m)/(4*b*d^3)
n = i;
plot(n,E,'*')
end

採用された回答

Oleg Komarov
Oleg Komarov 2012 年 3 月 26 日
Implement these changes:
% Fname as a cell array of strings
fname = {'Specimen_RawData_1.xls',...
...}
% note the curly brackets
a = xlsread(fname{i});
  1 件のコメント
Daniel Jednorozec
Daniel Jednorozec 2012 年 3 月 26 日
Wow, thank you so much. What a difference brackets make.

サインインしてコメントする。

その他の回答 (1 件)

Matt Tearle
Matt Tearle 2012 年 3 月 26 日
Strings in MATLAB are treated as a matrix of characters. Hence,
fname = ['Specimen_RawData_1.xls','Specimen_RawData_2.xls']
will make a 1-by-44 character array containing the string 'Specimen_RawData_1.xlsSpecimen_RawData_2.xls' (because you concatenated the two strings (char arrays) together horizontally).
So first fix is to concatenate them vertically into a matrix of characters:
fname = ['Specimen_RawData_1.xls';'Specimen_RawData_2.xls']
(Note the ; instead of ,). Now you have a matrix of two rows, one per string. To index into each filename in the loop, then, use
a = xlsread(fname(i,:));
Now, if your filenames have different lengths, you will not be able to concatenate vertically (all rows of a matrix must have the same number of columns).
So another approach is to use a cell array of strings:
fname = {'Specimen_RawData_1.xls','Specimen_RawData_2.xls'}
Then use cell indexing in the loop:
a = xlsread(fname{i});
Finally, you may want to investigate the functions ls and dir. You may also want the cellstr function for converting a char array to a cell array of strings.

カテゴリ

Help Center および File ExchangeCell Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by