我想将数据保存到for循环中具有这些文件名中连续编号的文件。
首先我有一个函数“SetConfeguration.m”,其中我将输入目录和文件名指定为结构中的字段,如下所示
StrConf.InputDirectory = 'C:/ElastixMatlab/elx_input';
StrConf.ParameterFilename = 'parameter.%d.txt';
结构“StrConf”将用作主函数中的参数,如下所示
ParameterFilename = fullfile(Conf.InputDirectory, Conf.ParameterFilename);
for Cpt = 1:NbParameterFiles
TmpParameterFilename = sprintf(ParameterFilename, Cpt - 1);
disp('ParameterFilename: '); disp(ParameterFilename);
end
我有以下错误:
Warning: Invalid escape sequence appears in format string. See help sprintf for
valid escape sequences.
> In elxElastix at 153
In elxExampleStreet at 93
ParameterFilename :
C:\ElastixMatlab\elx_input\parameter.%d.txt
TmpParameterFilename :
C:
答案 0 :(得分:1)
我认为您忘记调用结构StrConf
来访问参数
TmpParameterFilename = sprintf(StrConf.ParameterFilename, Cpt - 1);
disp('ParameterFilename: '); disp(StrConf.ParameterFilename);
另外,我建议你在for循环中做一点改动,因为它从0
循环到n-1
。
ParameterFilename = fullfile(Conf.InputDirectory, Conf.ParameterFilename);
for Cpt = 0:NbParameterFiles-1
TmpParameterFilename = sprintf(StrConf.ParameterFilename, Cpt);
disp('ParameterFilename: '); disp(StrConf.ParameterFilename);
end
这样您就可以在每次迭代中保存操作,因为您不会减少Cpt - 1
的减法,从而使您的代码更有效率。
答案 1 :(得分:0)
我想你想要
TmpParamterFilename = sprinf('%s%d.txt',ParameterFilename, Cpt-1);
然后,ParameterFilename最后不会有.txt。
答案 2 :(得分:0)
您需要在sprintf
之前使用fullfile
。问题是fullfile
正在将您的路径分隔符从代码中使用的/
规范化为\
,这是Windows上的标准。但是\
也用于sprintf识别的转义序列。
这会更好用:
for Cpt = 1:NbParameterFiles
TmpParameterFilename = fullfile(Conf.InputDirectory, ...
sprintf(StrConf.ParameterFilename, Cpt - 1));
disp('ParameterFilename: '); TmpParameterFilename;
end