Matlab 在fprintf中迭代数字

Matlab 在fprintf中迭代数字,matlab,Matlab,我在MATLAB中有以下代码。我想在代码的文件名(%d)部分依次迭代数字1、2和3,这样如果我打开所有曲目,每个if语句将打印文件名(1),文件名(2),文件名(3)。如果我关闭B_曲目,A_曲目将打印filename(1),C_曲目将打印filename(2)。如何在fprintf中迭代数字,以便文件名(%d)根据我打开和关闭的曲目顺序打印出来 A_track = 1; B_track = 0; C_track = 1; fid=fopen('test.txt','w'); if A_tr

我在MATLAB中有以下代码。我想在代码的
文件名(%d)
部分依次迭代数字1、2和3,这样如果我打开所有曲目,每个
if
语句将打印
文件名(1)
文件名(2)
文件名(3)
。如果我关闭
B_曲目
A_曲目
将打印
filename(1)
C_曲目
将打印
filename(2)
。如何在fprintf中迭代数字,以便文件名(%d)根据我打开和关闭的曲目顺序打印出来

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

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

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

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

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

fclose(fid);

对于数字的迭代,最简单的技巧是使用函数。 您可以设置分隔符并设置要迭代的列表的大小。 由于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,并且对于打印出来的每个项目,它都会增加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);

我还将A_track==1时的
更改为A_track时的
。我觉得这更容易阅读。如果对您更有意义,您可以使用
true
false
值来定义每个
track
变量。但是
true
1
在所有方面都是相同的。

如何在fprintf中迭代数字,以便文件名(%d)根据我打开和关闭的曲目顺序打印出来?
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
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);