我正在尝试使用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
我尝试使用dat数组,但是没有用。有什么想法吗?
答案 0 :(得分:0)
正如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