Reading multiple txt files and placing numerical data in a matrix

5 views (last 30 days)
Hi all, I'm trying to read multiple file text without the header and pile up their numerical content. I have attached an example txt file.
Here is the basic code I use:
[filename,pathname,d]=uigetfile('*.txt','MultiSelect','on');
filepath=fullpath(pathname,filename);
a=readtable(filepath);
a=table2array(a);
It works for 1 fIle but gives an error for more files selected. And then once I imported correctly multiple files, how do I pile their numerical content? I guess have to insert that in a for cycle. Bear in mind that different files can have different number of columns and rows.
Thanks in advance to anyone who will help me
  4 Comments
Jan
Jan on 25 Apr 2022
"but gives an error for more files selected" - whenever you mention an error in the forum, attach a copy of the complete error message instead of letting the readers guess, what you can see already.
Jeremy Hughes
Jeremy Hughes on 25 Apr 2022
a = readtable(filepath);
a = table2array(a);
Should be equivalent to:
a = readmatrix(filepath)

Sign in to comment.

Answers (1)

Jan
Jan on 25 Apr 2022
[filename, pathname] = uigetfile('*.txt','MultiSelect','on');
filename = cellstr(filename);
data = [];
for k = 1:numel(filename)
filepath = fullpath(pathname,filename);
tab = readtable(filepath);
data = cat(1, data, table2array(tab));
end
  5 Comments
Jan
Jan on 26 Apr 2022
@lacopo: I've copied "fullpath" from your example in the question. Maybe "fullfile" is meant.
Iacopo
Iacopo on 26 Apr 2022
@Jan you're right, my bad. I modified the piece of code but it doesn't work for more than 1 file. I changed the class of filepath to string to make the readtable function work:
[filename, pathname] = uigetfile('*.txt','MultiSelect','on');
filename = cellstr(filename);
data = [];
for k = 1:numel(filename)
filepath = string(fullfile(pathname,filename));
tab = readtable(filepath);
data = cat(1, data, table2array(tab));
end
If I select 2 files (I just created a copy of my file and selected both the original and the copy) and it gives me the following error:
Error using readtable
"filename" must be a string scalar or character vector.
Error in..
tab = readtable(filepath);

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!