want for loop to stop if k < 4

2 vues (au cours des 30 derniers jours)
Pedro Almeida
Pedro Almeida le 1 Fév 2022
Commenté : Pedro Almeida le 1 Fév 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

Réponse acceptée

Image Analyst
Image Analyst le 1 Fév 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 commentaire
Pedro Almeida
Pedro Almeida le 1 Fév 2022
I change a few things based on that and it worked, thank you!

Connectez-vous pour commenter.

Plus de réponses (1)

Benjamin Thompson
Benjamin Thompson le 1 Fév 2022
Use the break command:
if (k < 4) break;
  1 commentaire
Pedro Almeida
Pedro Almeida le 1 Fév 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

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by