How to load all the data in one folder
古いコメントを表示
Path = 'D:\50-350\';
File = dir( fullfile(Path,'*.dat'));
FileNames = {File.name}';
Length_Names = size(FileNames,1);
for i=1:Length_Names
filename=strcat(Path, FileNames(i));
eval(['Data',num2str(i),'=','load(filename{1,1})',';']);
end
I have 3 targets here:
1、Find out all the files with '.dat' in folder '50-350';
2、Read the data;
2、Rename the data from ‘Data1 Data2 Data3 Data4...’ one by one;
By the codes above, I successfuly achieve the goals, but I find that the size of the data change.
For example: I load the ' 31.dat ' by the above codes, and rename it as ' Data31'. The size of Data31 is 3353×10 . If I read '31.dat' directly, the size is 2501×10. I am wonder why it happened.
2 件のコメント
Sikai Wu
2021 年 2 月 19 日
For robustness you should preallocate Data before the loop.
Also fullfile is recommended instead of string concatenation.
You will probably find that the files are not imported in numeric order: to get numeric order based on numbered filenames (without leading zeros, as your example shows) you will need to do either of these:
- sort the names alphanumerically.
- generate the filenames (rather than using DIR), as shown here:
回答 (1 件)
"I am wonder why it happened."
Because you always load exactly the same file data (note the indexing you used):
filename{1,1}
Your code always loads the first file and ignores all the other files.
In any case your approach is not robust. Here is a simpler and more robust way to import that data:
P = 'D:\50-350\';
S = dir(fullfile(P,'*.dat'));
for k = 1:numel(S)
F = dir(fullfile(P,S(k).name));
S(k).data = readmatrix(F); % much better than EVAL and LOAD.
end
Depending on how the files are named, you might also find this useful:
カテゴリ
ヘルプ センター および File Exchange で File Operations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!