Effacer les filtres
Effacer les filtres

For loop to read in sequentially named .txt files

3 vues (au cours des 30 derniers jours)
HC98
HC98 le 6 Déc 2021
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 commentaire
Rik
Rik le 6 Déc 2021
That code looks like it should work. What happened when you tried it?

Connectez-vous pour commenter.

Réponses (1)

Alagu Sankar Esakkiappan
Alagu Sankar Esakkiappan le 9 Déc 2021
Modifié(e) : Alagu Sankar Esakkiappan le 9 Déc 2021
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 commentaires
Rik
Rik le 9 Déc 2021
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 le 9 Déc 2021
Good catch! Thanks for the improvement. I have integrated this in my answer as well

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by