Why isn't my loop working?

fid = uigetfile('*.*');
fid = fopen(fid);
deltat = 0.5;
n = 1;
while fgetl(fid)~= -1
line = fgetl(fid);
line = sscanf(line, '%f V, %i counts, %i ms');
vout = line(1);
counts = line(2);
t = line(3)/1000;
t(n+1) = t(n) + deltat;
% Q = flowrate (L/s)
% h = head(m)
% P = pressure
% p = density of water
p = 1000; %kg/m^3);
g = 9.81;
vs = 5;
% vout - get from data
% h - get from data
% Q - calculated from data
P = ((vout/vs) - 0.04)/0.0018;
% Finding head
h = (P/1000)/(p*g);
Q = counts/((t(n)/1000)*330);
% Finding hydraulic power
H =(Q*p*g*h)/1000;
end

6 comentarios

Walter Roberson
Walter Roberson el 18 de Mayo de 2018
Difficult to say without a sample input file.
By the way, remember to fclose(fid) afterwards.
Greg
Greg el 18 de Mayo de 2018
Editada: Greg el 18 de Mayo de 2018
Best line of MATLAB code you'll ever use:
clnfid = onCleanup(@() fclose(fid)); % Immediately following any fopen()
Also, move all of your constants outside the loop, and use fscanf on the fid directly, rather than sscanf(fgetl).
What do you mean "not working?" I don't see any syntax problems, so your loop should be running to the end of the file. Without more information, we can't offer any more than that.
Madison Goodwin
Madison Goodwin el 18 de Mayo de 2018
It will only produce a single value for each variable e.g. P. Whereas the loop needs to produce around 30 values, as there are 30 rows of data. The data in the file is in the form of: 30 V, 34 counts, 500ms
Greg
Greg el 18 de Mayo de 2018
See my answer
Madison Goodwin
Madison Goodwin el 18 de Mayo de 2018
Ok now it is producing all the values, but the time step is not updating as I would like it, it is meant to increase by 0.5 seconds for each line, but for each line in the data the t value is 0.5.
Madison Goodwin
Madison Goodwin el 18 de Mayo de 2018
So if I have these two lines as my code will it update the timestep, the value of line(3) is 500ms. After dividing by 1000 it is 0.5, and deltat is 0.5
t = line(3)/1000;
t = t + deltat;

Iniciar sesión para comentar.

Respuestas (1)

Greg
Greg el 18 de Mayo de 2018
Editada: Greg el 18 de Mayo de 2018

0 votos

Purely a guess, you goofed up some indexing:
t = line(3)/1000; % <-- Recreates a new "t" as a scalar every loop iteration
t(n+1) = t(n) + deltat; % <-- Therefore, t(n) does not exist, or is 0
Also, I don't see you incrementing n anywhere.

Categorías

Más información sobre Data Type Identification en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 18 de Mayo de 2018

Comentada:

el 18 de Mayo de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by