关于matlab的这个问题: 我正在运行循环并且每次迭代都会生成一组新数据,我希望每次都将其保存在一个新文件中。我还通过更改名称来覆盖旧文件。看起来像这样:
name_each_iter = strrep(some_source,'.string.mat','string_new.(j).mat')
我在这里苦苦挣扎的是迭代,以便我获取文件: ... string_new.1.mat ... string_new.2.mat 等
我尝试了各种组合的()[] {}以及'string_new.'j'.mat'(这给出了语法错误)
怎么做?
答案 0 :(得分:6)
字符串只是字符的向量。因此,如果您想迭代地创建文件名,请参阅以下示例:
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
答案 1 :(得分:5)
您还可以使用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}
答案 2 :(得分:3)
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通常很有用。
答案 3 :(得分:1)
要根据现有文件创建名称,您可以使用regexp来检测' _new。(数字).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'
开头