在变量文件名中嵌入数字和扩展名

时间:2015-03-30 17:34:59

标签: matlab for-loop filenames file-extension

我想将数据保存到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:

3 个答案:

答案 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