MATLAB进行迭代保存文件名(matlab iterative filenames for sav

2019-06-26 13:42发布

关于MATLAB这个问题:我运行一个循环,并在每次迭代一组新数据的产生,我希望它是每次都保存在一个新的文件。 我还可以通过变更名称覆盖旧的文件。 是这样的:

name_each_iter = strrep(some_source,'.string.mat','string_new.(j).mat')

和我#m的挣扎这里是迭代让我获取文件:... ... string_new.1.mat等string_new.2.mat

我用)的各种组合([] {}以及“string_new.'j'.mat”(这给了语法错误)尝试

怎么做到呢?

Answer 1:

用于创建基于现有文件的名称,你可以使用正则表达式来检测“_new(数字).MAT。”并根据发现什么正则表达式改变字符串:

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”



Answer 2:

字符串只是字符的载体。 所以,如果你想在这里重复的文件名创建的,你会怎么做一个例子:

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


Answer 3:

你也可以使用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}在每次迭代



Answer 4:

sprintf的是非常有用的是:

for ii=5:12
    filename = sprintf('data_%02d.mat',ii)
end

这种分配下列字符串filename

    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的一般是非常有用的。



文章来源: matlab iterative filenames for saving