在fprintf中迭代数字

时间:2018-06-18 21:43:41

标签: matlab

我在MATLAB中有以下代码。我想在代码的filename(%d)部分中按顺序迭代数字1,2和3,这样如果我打开所有轨道,则每个if语句将打印filename(1),{{1 },filename(2)。如果我关闭filename(3)B_track将打印A_trackfilename(1)将打印C_track。如何在fprintf中迭代数字,以便根据我打开和关闭的曲目顺序打印文件名(%d)?

filename(2)

2 个答案:

答案 0 :(得分:1)

我认为这是您打算完成的任务:i在开始时设置为1,对于打印出的每个项目,它都会增加1。这样,无论打开或关闭哪个轨道,打开的轨道都将以顺序i打印。

A_track = 1;
B_track = 0;
C_track = 1;

fid = fopen('test.txt','w');

i = 1;

if A_track
    fprintf(fid,'\n\n');
    fprintf(fid,['  filename(%d)=''test1''  \n'],i);
    fprintf(fid,'  idtrack(%d)=A_track \n',i);
    i = i+1;
end

if B_track
    fprintf(fid,'\n\n');
    fprintf(fid,['  filename(%d)=''test2''  \n'],i);
    fprintf(fid,'  idtrack(%d)=B_track \n',i);
    i = i+1;
end

if C_track
    fprintf(fid,'\n\n');
    fprintf(fid,['  filename(%d)=''test3''  \n'],i);
    fprintf(fid,'  idtrack(%d)=C_track \n',i);
    i = i+1;
end

fclose(fid);

我还将您的if A_track==1更改为if A_track。我发现这更容易阅读。您可以使用truefalse值来定义每个track变量,如果这对您更有意义的话。但true1对于所有目的都是相同的。

答案 1 :(得分:0)

对于数字的迭代,最简单的技巧是使用mod()函数。 您设置分隔符并设置要迭代的列表的大小。 由于 mod()将返回0,您必须向其添加1,因为matlab索引从1开始而不是0的矩阵。(大多数编程语言从0开始)

所以,让我们说你有一个for循环,你想迭代数字1,2和3.然后它会看起来像这样

for ii=0:10
    nmbtoprint=mod(ii,3)+1;
    fprintf(fid,['  filename=''test_%1''  \n'],nmbtoprint);
end

只要你有一个普通的计数器,你就不需要为每个if语句使用for循环。对于通用计数器,您可以创建任何变量,只需确保它更新(在脚本中的任何位置添加1)。

i=1; %number at which you initiate your variable

if %check if true then do something 
    %run some piece of code
    i=i+1; %increase the counter by 1
end

您也可以使用(单元格)数组。

idtoprint1=[0,1,10,100];
idtoprint2={'first','B','3rd'};

for ii=0:10
    ida1=mod(ii,4)+1;
    ida2=mod(ii,3)+1;
    fprintf(fid,['  filename=''test_%i''  \n'],idtoprint1(ida1));
    fprintf(fid,['  filename=''test_%s''  \n'],idtoprint2{ida2});
end