Matlab将不同文件名的表格保存在不同的文件中



我正在尝试使用datastorereadtable读取不同的文件(txt(,以便解析它们并将它们写入.mat文件。我使用ds = datastore('*.txt').Files获取目录中的所有文件名,然后使用for循环迭代所有不同的文件,并用不同的名称保存它们。然而,当我在matlab中导入文件时,它们都有相同的表名(dat(。

这是代码:

ds = datastore('*.txt');
fnames = ds.Files;
l = length(fnames);
for i = 1:l
dat = readtable(fnames{i}, 'Delimiter', 't');
dat.Properties.VariableNames(1:2) = {'rpm', 'p_coll'};
dat = removevars(dat{i},20:width(dat));
save([fnames{i} '.mat'],'dat');
end

我尝试使用一个数据数组,但没有成功。有什么想法吗?

正如Sardar所说,将数据存储在L不同的变量中毫无意义。如果必须这样做,那么在程序设计中可能会出现更大的问题。你最好描述一下你为什么需要它。

作为一种替代方案,您可以在单个单元格数组中加载这些文件:

L = 10;
for ii =1:L
dat = 2*ii;
fn = sprintf('dat%d.mat', ii);
save(fn, 'dat');
end
dats = cell(L, 1);
for ii=1:L
fn = sprintf('dat%d.mat', ii);
load(fn);
dats{ii} = dat;
end

另一种选择是将它们封装在一个结构中:

dats = struct();
for ii=1:L
fn = sprintf('dat%d.mat', ii);
load(fn);
dats.(sprintf('dat%d', ii)) = dat;
end

与细胞阵列相比,我看不出这种方法有任何优势,但它有点有趣。

最后,如果您确实有理由将数据存储在多个变量中,则可以使用eval:

for ii =1:L
dat = ii^2;
eval(sprintf('dat%d=dat;', ii));
fn = sprintf('dat%d.mat', ii);
save(fn, sprintf('dat%d', ii));
end
for ii=1:L
fn = sprintf('dat%d.mat', ii);
load(fn);
end

最新更新