Counter Values Are Not Changing, MATLAB

1 回表示 (過去 30 日間)
Daniel Barzegar
Daniel Barzegar 2014 年 6 月 18 日
コメント済み: Daniel Barzegar 2014 年 6 月 18 日
I am new to Matlab and I have an issue where two counters in my code do not change value.
fid = fopen('results.txt', 'wt');
counter1 = 0;
counter2 = 3;
for i=1:size(res_t,1)
counter1 = counter1 + 1;
if(counter2 == 3)
fprintf(fid, '%f ', res_t.time(:,:)); % first column i need the time
counter2 = 0;
end
fprintf(fid, '%f ', res_t.data(:,:)');
if(counter1 == 3)
fprintf(fid, '\n'); %after it writes all 3 X,Y,Z i want to change line
counter1 = 0;
end
counter2 = counter2 + 1;
end
fclose (fid);
}
When compiled, the values of counter1 & counter2 do not change, which means they never meet the If statement conditions. My output file is a file which contains: column1: time values, columns2 to 4: X, Y, Z coordinates respectively.
For example:
Time1 X1 Y1 Z1
Time2 X2 Y2 Z2
Thanks!

採用された回答

dpb
dpb 2014 年 6 月 18 日
Probably because
size(res_t,1)
is either empty or 0 so the loop never executes.
You say "when compiled"; is that a euphemism or are you really building a compiled .exe? I've never had the toolbox so don't know what/how it deals with undefined variables when it finds one--at the command line if res_t didn't exist you'd error and know what the problem is.
  4 件のコメント
Daniel Barzegar
Daniel Barzegar 2014 年 6 月 18 日
well, my matrix has 9 lines and i want to do the for loop for all the lines. How i can do the for loop until the end of the matrix?
for i=1: ???
... ...
end
cheers
José-Luis
José-Luis 2014 年 6 月 18 日
By lines you mean row or columns?

サインインしてコメントする。

その他の回答 (2 件)

Image Analyst
Image Analyst 2014 年 6 月 18 日
Why not just write out all 4 numbers in a single fprintf()???? Also, you'd have to index res_t with i, which you're not doing now.
  2 件のコメント
Daniel Barzegar
Daniel Barzegar 2014 年 6 月 18 日
because this is just a small example . my real file has more than 5000 samples...!
Image Analyst
Image Analyst 2014 年 6 月 18 日
5000 is still pretty small.

サインインしてコメントする。


dpb
dpb 2014 年 6 月 18 日
...the value of size(res_t,1) = 1 , that's why i doesnt do the loop. res_t is a matrix having 9 lines
Well, one or the other of those statements is just plain wrong. Use the debugger and step thru and figure out where it goes wrong or show enough context we can tell -- as is, there's not enough information to do anything useful on that part.
Oh, I see...you've written
for i=1:size(res_t,1)
but it turns out looking on down later that res_t is a structure not matrix. You need
for i=1:size(res_t.data,1)
to address the data array inside the structure.
And, as IA indicates, why not write the file with one of the higher-level routines like dlmwrite or at least with a single fprintf loop?
dlmwrite('yourfile',[res_t.time res_t.data], 'delimiter', ' ')
  1 件のコメント
Daniel Barzegar
Daniel Barzegar 2014 年 6 月 18 日
yes, you are right. i just had to have size(res_t.data). thanks!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by