want for loop to stop if k < 4

1 visualizzazione (ultimi 30 giorni)
Pedro Almeida
Pedro Almeida il 1 Feb 2022
Commentato: Pedro Almeida il 1 Feb 2022
This part of the program takes a file, and takes the numbers inside that file and puts it into a matrix. It only works when, in each line, it does this 4 times, how do I make it so, if it does it less than 4 times and the line is empty, it stops the for loop?
while ~feof(fid)
i = i + 1;
linha = fgetl(fid);
for k = 1:4
linha(1) = [];
[valor, linha] = strtok(linha, ',)');
matriz(i,k) = str2double(valor);
end
end

Risposta accettata

Image Analyst
Image Analyst il 1 Feb 2022
Try this:
while ~feof(fid)
i = i + 1;
linha = fgetl(fid);
% Break if the line is empty and we won't be able to get 4 numbers from it.
if isempty(linha)
break; % Break ot of the while.
end
% If we get to here, the line is good and we should be able to get our
% numbers using the poster's original code (hopefully).
for k = 1:4
%linha(1) = []; % Not needed.
[valor, linha] = strtok(linha, ',)');
matriz(i,k) = str2double(valor);
end
end
  1 Commento
Pedro Almeida
Pedro Almeida il 1 Feb 2022
I change a few things based on that and it worked, thank you!

Accedi per commentare.

Più risposte (1)

Benjamin Thompson
Benjamin Thompson il 1 Feb 2022
Use the break command:
if (k < 4) break;
  1 Commento
Pedro Almeida
Pedro Almeida il 1 Feb 2022
for it to also work with the correct format, I have to put something else like this, but it gives me an error 'Matrix index is out of range for deletion.' in linha(1) = [ ]; anything else I could try?
while ~feof(fid)
i = i + 1;
linha = fgetl(fid);
for k = 1:4
linha(1) = [];
[valor, linha] = strtok(linha, ',)');
matriz(i,k) = str2double(valor);
if (k < 4) & linha == 0
break
end
end
end

Accedi per commentare.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Prodotti


Release

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by