在可变文件名中嵌入数字和扩展名
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
我想在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