String matlab用于保存的迭代文件名

String matlab用于保存的迭代文件名,string,matlab,file-io,filenames,save,String,Matlab,File Io,Filenames,Save,关于matlab的这个问题: 我正在运行一个循环,每次迭代都会生成一组新的数据,我希望每次都将其保存在一个新文件中。我还通过更改名称来覆盖旧文件。看起来像这样: name_each_iter = strrep(some_source,'.string.mat','string_new.(j).mat') 我在这里挣扎的是迭代,以便获得文件: …字符串_new.1.mat …字符串_new.2.mat 等等 我尝试使用()[]{}和'string_new.'j'.mat'的各种组合(这会产生语法

关于matlab的这个问题: 我正在运行一个循环,每次迭代都会生成一组新的数据,我希望每次都将其保存在一个新文件中。我还通过更改名称来覆盖旧文件。看起来像这样:

name_each_iter = strrep(some_source,'.string.mat','string_new.(j).mat')
我在这里挣扎的是迭代,以便获得文件: …字符串_new.1.mat …字符串_new.2.mat 等等

我尝试使用()[]{}和'string_new.'j'.mat'的各种组合(这会产生语法错误)


怎么做呢?

字符串只是字符的向量。因此,如果您想以迭代方式创建文件名,下面是一个示例:

for j = 1:10,
   filename = ['string_new.' num2str(j) '.mat'];
   disp(filename)
end
上述代码将创建以下输出:

string_new.1.mat
string_new.2.mat
string_new.3.mat
string_new.4.mat
string_new.5.mat
string_new.6.mat
string_new.7.mat
string_new.8.mat
string_new.9.mat
string_new.10.mat
在这方面非常有用:

for ii=5:12
    filename = sprintf('data_%02d.mat',ii)
end
这会将以下字符串分配给
文件名

    data_05.mat
    data_06.mat
    data_07.mat
    data_08.mat
    data_09.mat
    data_10.mat
    data_11.mat
    data_12.mat

注意零填充。如果您想要参数化格式化字符串,sprintf通常很有用。

您还可以使用NUM2STR提前生成所有文件名:

>> filenames = cellstr(num2str((1:10)','string_new.%02d.mat'))

filenames = 
    'string_new.01.mat'
    'string_new.02.mat'
    'string_new.03.mat'
    'string_new.04.mat'
    'string_new.05.mat'
    'string_new.06.mat'
    'string_new.07.mat'
    'string_new.08.mat'
    'string_new.09.mat'
    'string_new.10.mat'

现在,在每次迭代中以
filenames{i}
的形式访问单元格数组内容

要基于已存在的文件创建名称,可以使用检测“_new.(number).mat”并根据regexp找到的内容更改字符串:

original_filename = 'data.string.mat';
im = regexp(original_filename,'_new.\d+.mat')
if isempty(im) % original file, no _new.(j) detected
    newname = [original_filename(1:end-4) '_new.1.mat'];
else
    num = str2double(original_filename(im(end)+5:end-4));
    newname = sprintf('%s_new.%d.mat',original_filename(1:im(end)-1),num+1);
end
这正是如此,并产生:

    data.string_new.1.mat
    data.string_new.2.mat
    data.string_new.3.mat
    ...

    data.string_new.9.mat
    data.string_new.10.mat
    data.string_new.11.mat

当迭代上述函数时,从'data.string.mat'开始,它可以很好地保存一个新文件,但对我来说,当我使用strrep和'num2str(j')一起使用时,在覆盖的情况下就不行了。我有遗漏什么吗?谢谢!另一个好主意。但是如何将它与替换已有名称的字符串部分结合起来呢?请始终以这种方式保存文件,这样您就可以轻松地重新构建文件名。如果是,则您可以访问文件的现成结构,在保存时只需替换某些名称部分即可覆盖这些文件。这就是为什么我坚持使用strrep,因为我想在不知道这些名称的情况下搜索文件名中的某个字符串。谢谢,现在我找到了最简单的解决方案:):name_each_iter=strrep(一些源代码,'.string.mat',['string_new.'num2str(j)'.mat']),所以在这种情况下添加方括号就足以进行迭代。