我在MATLAB中有以下代码。我想在代码的filename(%d)
部分中按顺序迭代数字1,2和3,这样如果我打开所有轨道,则每个if
语句将打印filename(1)
,{{1 },filename(2)
。如果我关闭filename(3)
,B_track
将打印A_track
,filename(1)
将打印C_track
。如何在fprintf中迭代数字,以便根据我打开和关闭的曲目顺序打印文件名(%d)?
filename(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
。我发现这更容易阅读。您可以使用true
和false
值来定义每个track
变量,如果这对您更有意义的话。但true
和1
对于所有目的都是相同的。
答案 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