For loop to read in sequentially named .txt files

5 ビュー (過去 30 日間)
HC98
HC98 2021 年 12 月 6 日
I have a batch of txt files named "0, 2, 4, 6, 8".txt and wondered if there was a way for me to read them all in as one batch using a for loop, maybe something like:
txtFiles = dir('*.txt') ;
N = length(txtFiles) ;
iwant = cell(1,N) ;
for i = 1:N
iwant{i} = importdata(txtFiles(i).name) ;
end
% works if all cells are of same size
M = cell2mat(iwant) ;
pcolor(M) ;
shading interp
  1 件のコメント
Rik
Rik 2021 年 12 月 6 日
That code looks like it should work. What happened when you tried it?

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

回答 (1 件)

Alagu Sankar Esakkiappan
Alagu Sankar Esakkiappan 2021 年 12 月 9 日
編集済み: Alagu Sankar Esakkiappan 2021 年 12 月 9 日
I gather that you're trying to convert numerical data from many text files into a single matrix. The Code given in question's reference would work fine with a slight catch. I presume that you're trying to concatenate data from all text file sources in a Row-by-Row manner. But with the above code, cell2mat function appends in a columnwise manner. i.e, cell2mat combines three 5*3 cell arrays into a single 5*9 array instead of 15*3 array. To resolve this, You may try transposing the cell array before matrix conversion according to the following reference:
M = cell2mat(iwant') ; % Transpose Cell Array before conversion
You might also run into another problem for matrix conversion if the text files also have a Column text header in each file. In this case, cell2mat will not return a numerical matrix as expected but instead returns a structure. You may extract data in such case using the following reference:
for i = 1:N
iwant{i} = importdata(txtFiles(i).name) ; % iwant now contains Column header text data as well
end
iwantStruct = cell2mat(iwant'); % Returns a Structure instead of a matrix
matrixData = vertcat(iwantStruct(1:N).data); % Perform Columnwise concatenation to extract data from Stucture for each file
  2 件のコメント
Rik
Rik 2021 年 12 月 9 日
The second loop can be replaced by this:
matrixData=vertcat(iwantStruct(1:N).data);
That avoids the iterative growing of the array as well.
Alagu Sankar Esakkiappan
Alagu Sankar Esakkiappan 2021 年 12 月 9 日
Good catch! Thanks for the improvement. I have integrated this in my answer as well

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

カテゴリ

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

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by