How to load numbers from a text file to a .mat file?

I have a text file in the following format. How can I load it to a .mat file in its present form?
5
3
3 2 3 4
2 -1 5
3 1 -3 -4

4 comentarios

You have a different number of numbers in each row. How do you want to hold the data?
I would like it exactly like it comes from the file. The digits need to be loaded as-is into a matrix to be used for computation. The first two rows will always have 1 digit. The remainin rows and colums vary with each text file.
The only way to get it "exactly like it comes from the file" is in text form.
MATLAB does not have any way to represent arrays that have varying numbers of columns per row (or varying number of rows per column.) There is no way, in MATLAB, to represent "holes" -- you cannot, for example, have a matrix
3 2 3 4
2 -1 5 <hole>
3 1 -3 -4
The closest you can get would be to put NaN in the empty locations.
I am ok with filling the missing values with zero or NaN to make a square matrix. How is that accomplished?

Iniciar sesión para comentar.

 Respuesta aceptada

filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/855395/text.txt';
data = readmatrix(filename)
data = 3×4
3 2 3 4 2 -1 5 NaN 3 1 -3 -4

2 comentarios

Thank you! Is there a way to get the first two lines included in the matrix?
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/855395/text.txt';
opts = detectImportOptions(filename);
opts.DataLines = [1 inf];
data = readmatrix(filename, opts)
data = 5×4
5 NaN NaN NaN 3 NaN NaN NaN 3 2 3 4 2 -1 5 NaN 3 1 -3 -4

Iniciar sesión para comentar.

Más respuestas (2)

hi
maybe this
(I assumed you want each individual value stored in a cell)
the cell array can be of course saved to a mat file
a = readcell('data.txt',"Delimiter"," ")
a = 5×4 cell array
{[5]} {1×1 missing} {1×1 missing} {1×1 missing}
{[3]} {1×1 missing} {1×1 missing} {1×1 missing}
{[3]} {[ 2]} {[ 3]} {[ 4]}
{[2]} {[ -1]} {[ 5]} {1×1 missing}
{[3]} {[ 1]} {[ -3]} {[ -4]}
save test.mat a

1 comentario

Will this load like a matrix for operations? I am gettting a 1X4 cell with metadata.

Iniciar sesión para comentar.

You can read the file into a character array called text and save it to a .mat file:
% read characters from text file:
fid = fopen('text.txt');
text = fread(fid,'*char').';
fclose(fid);
% save to mat:
save('text.mat','text');
Then load the .mat file to check that it is the same as the text file:
S = load('text.mat');
disp(S.text);
5 3 3 2 3 4 2 -1 5 3 1 -3 -4

2 comentarios

Will this load like a matrix? I need integers for the algorithm I'm using.
Voss
Voss el 6 de En. de 2022
No, this will load like text.

Iniciar sesión para comentar.

Categorías

Más información sobre Characters and Strings en Centro de ayuda y File Exchange.

Preguntada:

el 6 de En. de 2022

Comentada:

el 6 de En. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by