Load multiple matlab data files and convert them to text

Hi!
I have multiple matlab data files with different names (with ECG data from multiple patients) and I want to load them all and convert them to text.
Also, the data is in structure form so I have to do the following for each file:
signal = load('FileName')
data = [signal.val];
writematrix(data,'FileName.txt','Delimiter',',');
How can I do it all at the same time? Thank you a lot in advance :)

 Accepted Answer

Code samples for processing a sequence of files are given in the FAQ:

6 Comments

Thank you! I'm doing this but how can I save each file with a different name (I want them to have the original name but in .txt format).
I'm trying to do this but it doesn't work:
myFolder = 'C:\Myfoldersdirectory';
filePattern = fullfile(myFolder, '*.mat');
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
signal = load(fullFileName);
data = -[signal.val];
writematrix(data,'fullFileName.txt','Delimiter',',');
end
I know when I write 'fullFileName.txt' it creates a file with literaly the name 'fullFileName' but how can I change that so each file in the cycle has its own original name?
What is the extension of your files? .mat? .txt? .dat?
If you put something inside quotes, it uses that. If you put a variable name, it will use whatever is in the variable name, so you should not use quotes:
writematrix(data, fullFileName, 'Delimiter',',');
the original file is in .mat but I want to convert it to .txt and if I don specifiy it in quotes I get this error:
Error using writematrix (line 206)
Unrecognized file extension '.mat'. Use the 'FileType' parameter to specify the file type.
Please attach one of the .mat files with the paperclip icon.
myFolder = pwd; %'C:\Myfoldersdirectory';
filePattern = fullfile(myFolder, 'EKG*.mat');
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf('Now reading input file : "%s".\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
storedStructure = load(fullFileName);
% See if it has a val field stored in the .mat file.
if ~isfield(storedStructure, 'val')
% Show what fieldnames there are:
fieldnames(storedStructure)
errorMessage = sprintf('Error: no field called "val" in file\n"%s".\n\nSkipping this file.', baseFileName);
uiwait(errordlg(errorMessage));
continue; % Skip to bottom of for loop and continue iterations.
end
data = -storedStructure.val;
fprintf('Now plotting %d values of data.\n', length(data));
plot(data, '-', 'LineWidth', 2);
hold on
% Create the output file name.
[~, baseFileNameNoExt, etc] = fileparts(baseFileName);
fullOutputFileName = fullfile(myFolder, [baseFileNameNoExt, '.txt']);
fprintf('Now writing output file : "%s".\n', fullOutputFileName);
writematrix(data, fullOutputFileName, 'Delimiter', ',');
end
I added some improvments and robustness checks, like printing out informational messages, adding comments, using descriptive variable names, plotting the data, and checking to see if the data is actually in the mat file to begin with. It never hurts to be extra robust.

Sign in to comment.

More Answers (1)

If you are talking about series of files (e.g: P1.txt, P2.txt, ...) to load and convert their contents, then this might be an option:
for ii = 1:numel(Files)
FName = strcat('P', num2str(ii), '.txt');
signal = load(FName)
data = [signal.val];
writematrix(data,'FileName.txt','Delimiter',',', 'WriteMode','append');
end

1 Comment

Thank you!! But unfortunately the files I want to load are not in a series, so I cant use that :(
I'm doing this but how can I save each file with a different name (I want them to have the original name but in .txt format).
I'm trying to do this but it doesn't work:
myFolder = 'C:\Users\myfoldersdirectory';
filePattern = fullfile(myFolder, '*.mat'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
signal = load(fullFileName);
data = -[signal.val];
writematrix(data,'fullFileName.txt','Delimiter',',');
end
I know when I write 'fullFileName.txt' it creates a file with literaly the name 'fullFileName' but how can I change that so each file in the cycle has its own original name?

Sign in to comment.

Categories

Find more on Convert Image Type in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!