MATLAB Answers

How can I combine multiple matfile containing row vector in one table

1 ビュー (過去 30 日間)
Yared Daniel
Yared Daniel 2021 年 6 月 25 日
コメント済み: Nikhil Sapre 2021 年 6 月 26 日
I have several dot matfile containing row vector and I want them to put in one table sequentially (according to alphabetic order of the file name).
I tried the following script which I found in Math works, it combines all the files in one table, however when I use it for more number files it do not work sequentially and I faced difficulty to identify which row corresponds to which file.
clear
FileList = dir('As*.mat');
DataC = cell(1, numel(FileList));
for iFile = 1:numel(FileList)
FileData = load(FileList(iFile).name);
DataC{iFile} = FileData.X;
end
DataM = cat(1, DataC{:});
I have attached sample dot mat files
Thank You for response
  7 件のコメント
Nikhil Sapre
Nikhil Sapre 2021 年 6 月 26 日
Thanks. This is a better solution. I didn't know of the natsortfile function.

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

採用された回答

Nikhil Sapre
Nikhil Sapre 2021 年 6 月 25 日
編集済み: Nikhil Sapre 2021 年 6 月 25 日
Hi Yared,
Can you check if the order is correct in the variable FileList. My guess is the problem happens because the sorted order would be As(1), As(10), As(2) etc .. when using the dir function
A workaround would be to sort it based on date created. This code should fix it, assuming your files were created in the order they are named. .
FileList = dir('As*.mat');
DataC = cell(1, numel(FileList));
[~,idx] = sort([FileList.datenum]);
for iFile = 1:numel(idx)
FileData = load(FileList(idx(iFile)).name);
DataC{iFile} = FileData.X;
end
DataM = cat(1, DataC{:});

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by