2015-03-30 87 views
1

我想将数据保存到for循环中这些文件名中具有连续数字的文件。在可变文件名中嵌入数字和扩展名

第一我有一个函数“SetConfeguration.m”,其中我specifie输入目录和文件名作为字段中的结构如下面

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

您正在使用什么语言? – Dnyanesh 2015-03-30 17:37:19

+0

我正在使用Matlab – 2015-03-30 17:54:39

回答

0

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

这将更好的工作:

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

谢谢@Ben Voigt您的回应, 它终于有效 – 2015-03-30 21:22:10

0

我想你想

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

然后ParameterFilename就不会在最后.txt文件。

+0

对不起,意思是改变ParameterFilename,使它只有路径加上没有后缀的文件名。 – dmedine 2015-03-30 18:56:06

+0

谢谢@dmedine非常您的回复,我尝试它,它工作正常 – 2015-03-30 21:24:14

1

我想你忘了打电话结构StrConf访问参数

TmpParameterFilename = sprintf(StrConf.ParameterFilename, Cpt - 1); 
disp('ParameterFilename: '); disp(StrConf.ParameterFilename); 

另外,我建议你做的for循环变化不大,因为它循环从0n-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的减法,使你的代码一点点更有效率。

+0

谢谢@eventHandler你的回应, 结构StrConf.ParameterFilename包含文件名和扩展名,但不是目录, 'code'StrConf .ParameterFilename ='参数。%d.txt'; 这就是为什么我使用 ParameterFilename = fullfile(Conf.InputDirectory,Conf.ParameterFilename); 感谢您对for循环的建议,我会考虑它。 – 2015-03-30 19:38:53

+0

现在我明白了,我在那里犯了很多错误......很高兴至少在那个循环中有所帮助。 – eventHandler 2015-03-30 19:41:01