MATLAB: How to ‘cat’ the dataset

datafunctiontable

I have .mat files in a folder, each of them is the same size 1×500, what i want to do is to create a table where the first element will be the file name(without the mat) and the second being the loaded data file so we'll end up having an nx2 matrix n being the number of files in the folder, what i tried:
full_val = 1;
path_directory='C:\Users\me\Desktop\test_data';
original_files=dir([path_directory '/*.mat']);
for k=1:length(original_files)
filename=[path_directory '/' original_files(k).name];
original_files(k).name = strtok(original_files(k).name, '.mat');
disp(original_files(k).name)
data_line = load(filename);
full_val = cat(1,full_val,filename);
end
but i get this error Error using cat Dimensions of matrices being concatenated are not consistent which makes sense but i have hundreds of file i can't write their names manually and load each individually how to adjust my code for the task?

Best Answer

You load the data into the struct data_line, but yu do not save the loaded structure. Instead, you cat(1) something that starts out as the numeric value 1, together with something that is a character vector that is the file name.
Try
full_val = 1;
path_directory='C:\Users\me\Desktop\test_data';
original_files=dir([path_directory '/*.mat']);
nfiles = length(original_files);
full_val = cell(nfiles, 2);
for k=1:length(original_files)
filename=[path_directory '/' original_files(k).name];
original_files(k).name = strtok(original_files(k).name, '.mat');
disp(original_files(k).name)
data_line = load(filename);
full_val(k, :) = {filename, data_line};
end
Though what I suspect you would want would be
fn = fieldnames(data_line);
full_val(k, :) = {filename, data_line.(fn{1})};
This extracts the first variable's value out of the loaded file.