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

embed a number and extension in a variable file name

我想在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:

我想你想要

  TmpParamterFilename = sprinf('%s%d.txt',ParameterFilename, Cpt-1);

然后 ParameterFilename 的末尾不会有 .txt。

我想你忘了调用结构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 进行减法运算,从而使您的代码更加高效。

您需要在 fullfile 之前使用 sprintf。问题是 fullfile 将代码中使用的 / 的路径分隔符规范化为 \,这是 Windows 上的标准。但是 \ 也用于 sprintf 识别的转义序列。

这样效果会更好:

for Cpt = 1:NbParameterFiles
   TmpParameterFilename = fullfile(Conf.InputDirectory, ...
                                   sprintf(StrConf.ParameterFilename, Cpt - 1));
   disp('ParameterFilename: '); TmpParameterFilename;
end