How to store multiple output tables in a cell array

조회 수: 54 (최근 30일)
Andre White
Andre White 2022년 5월 27일
댓글: Andre White 2022년 5월 30일
Hi everyone:
I have some output data stored in tabular format in .txt/csv files (file name format, IEA-15-240-RWT-UMaineSemi100m45mpsSNS 'file number'-'bachnumber'.out). The tables are stored in batches from 0:30:330 (30 increments). Each batch cotains 6 tables. Hence 0 contains six tables/files, numbered 1:6. I am able to store the data/file for one batch in a cell array like this:
for ii=1:6
OutputData{ii,1} = readtable(['IEA-15-240-RWT-UMaineSemi100m45mpsSNS',num2str(ii),'-0.out'],'FileType',"text",'HeaderLines',8,"ReadVariableNames",0);
OutputData{ii,1} = table2array(OutputData{ii,1});
end
However this is just for the 0 batch. I would like to formualte the code such that the tables from all batches are stored in a cell array or other appropriate storage method. I tried the following:
for ii=1:2
for jj=0:30
OutputData{jj}{ii,1} = readtable(['IEA-15-240-RWT-UMaineSemi100m43mpsJCS',num2str(ii),'-',num2str(jj)','.out'],'FileType',"text",'HeaderLines',8,"ReadVariableNames",0);
OutputData{jj}{ii,1} = table2array(OutputData{jj}{ii,1});
end
end
But rceived the folowing error:
"Unable to perform assignment because brace indexing is not supported for variables of this type."
Numerous attempts to solve this problem have failed. I would be grateful if someone could give some guidance to help me to solve it.
Thank you.
Regards,
AOAW
  댓글 수: 1
Walter Roberson
Walter Roberson 2022년 5월 27일
Did you clear OutputData? Before the loop it exists but it is not a cell.
Note that you cannot index at j=0

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2022년 5월 27일
편집: Stephen23 2022년 5월 27일
With MATLAB it is easier and more versatile to loop over indices, rather than looping over data. This makes it easy to preallocate the cell array used to store the imported data, which will resolve the error you describe. For example:
V1 = 0:30:330;
V2 = 1:6;
N1 = numel(V1);
N2 = numel(V2);
C = cell(N1,N2); % preallocate!!!!!
for k1 = 1:N1
for k2 = 1:N2
F = sprintf('IEA-15-240-RWT-UMaineSemi100m43mpsJCS%d-%d.out', V1(k1), V2(k2));
T = readtable(F,'FileType',"text",'HeaderLines',8,"ReadVariableNames",0);
C{k1,k2} = table2array(T); % why not just use READMATRIX ?
end
end
Store your data and code separately and use an absolute/relative path to access the data files, for example:
P = 'absolute or relative path to where the files are saved';
for ..
.. readtable(fullfile(P,F), ..)
end
  댓글 수: 16
Andre White
Andre White 2022년 5월 30일
@Stephen23 I do believe the code is indented. That is how it comes up when I click on the insert matlab code in this text box.
I have solved the problem using the code below:
for ii=1:6
for jj=1:12
maxTwrBsFxtall_S(ii,jj)=max(abs(C{ii,jj}(:,TwrBsFxt)));
maxTwrBsFxt_S=max(maxTwrBsFxtall_S);
meanTwrBsFxt_S=mean(maxTwrBsFxtall_S);
stdTwrBsFxt_S=std(maxTwrBsFxtall_S);
end
It uses C{x1,x2} and finds max value and other characteristics of variables that I need.
Thanks for your help.
AOAW
Andre White
Andre White 2022년 5월 30일
@Stephen23 the first line should read "I do not".

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2022년 5월 27일
I suggest you simply things by creating intermediate variables. Trying to index a 2-D cell array inside a cell of another, outer 2-D cell array like
OutputData{jj}{ii,1}
is just getting way too complicated for me to understand. Try something simpler like perhaps this:
fCounter = 1;
for f = 0 : 30 : 330 % Loop over files.
for b = 1 : 6 % Loop over 6 batches.
thisFileName = sprintf('IEA-15-240-RWT-UMaineSemi100m43mpsJCS%d-%d.out', f, b);
if ~isfile(thisFileName)
% Skip it if the file does not exist.
fprintf('File does not exist: "%s".\n', thisFileName);
continue;
end
thisTable = readtable(thisFileName,'FileType',"text",'HeaderLines',8,"ReadVariableNames",0);
OutputData{b, fCounter} = table2array(thisTable);
end
fCounter = fCounter + 1;
end
  댓글 수: 3
Image Analyst
Image Analyst 2022년 5월 27일
OK. You accepted an answer already so I guess you got it all figured out so I won't put any more effort towards this.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by