Azzera filtri
Azzera filtri

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

1 visualizzazione (ultimi 30 giorni)
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 Commenti
Jan
Jan il 11 Apr 2016
What result do you want? A matrix is rectangular by definition.
Diogo Nascimento
Diogo Nascimento il 12 Apr 2016
I want to fill the shorter rows with zero, to make it rectangular

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 12 Apr 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 Commenti
Walter Roberson
Walter Roberson il 12 Apr 2016
Change
num_ent = fscanf(file, '%f');
to
num_ent = fscanf(file, '%f', 1);
Diogo Nascimento
Diogo Nascimento il 12 Apr 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!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Tables in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by