我正在尝试使用datastore
和readtable
读取不同的文件(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