Borrar filtros
Borrar filtros

How to create a matrix from a txt file with variable column numbers?

1 visualización (últimos 30 días)
Hey there!
I am trying to create a matrix from a txt file that the user inputs that goes like this:
Matrix
4
1 1 3 2 6 1
2 1 4 3 5 2 5
3 1 3 4 8 3
4 1 3 5 1 6
The number in the line after "Matrix" represents the number of lines of the matrix I wanna create.
The number of the 3rd column represent the remaining entries on that line and can only vary between 3 or 4.
I've come up with
tline = fgetl(file);
n = fscanf(file,'%f',1);
matrix = fscanf(file,'%e', [n inf]); % but this puts it into a 1x... Matrix...
Thanks for the help
  2 comentarios
Jan
Jan el 11 de Abr. de 2016
What result do you want? A matrix is rectangular by definition.
Diogo Nascimento
Diogo Nascimento el 12 de Abr. de 2016
I want to fill the shorter rows with zero, to make it rectangular

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 12 de Abr. de 2016
tline = fgetl(file);
n = fscanf(file, '%f', 1);
for K = 1 : n
rownum = fscanf(file, '%f', 1);
col_offset = fscanf(file, '%f', 1);
num_ent = fscanf(file, '%f');
data_for_row = fscanf(file, '%f', [1 num_ent]);
data(rownum, col_offset + (0:num_ent-1)) = data_for_row;
end
This will pad shorter rows with 0. I had to guess at the meaning of the fields.
  3 comentarios
Walter Roberson
Walter Roberson el 12 de Abr. de 2016
Change
num_ent = fscanf(file, '%f');
to
num_ent = fscanf(file, '%f', 1);
Diogo Nascimento
Diogo Nascimento el 12 de Abr. de 2016
thank you so much! that did the trick!
just had to adjust
data(rownum, col_offset + (0:num_ent-1)) = data_for_row;
to
data(rownum, (1:num_ent)) = data_for_row;
and it worked for other matrixs!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Tables en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by