Matlab在不同文件中以不同文件名保存表

时间:2019-11-13 18:45:40

标签: matlab file variables

我正在尝试使用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

我尝试使用dat数组,但是没有用。有什么想法吗?

1 个答案:

答案 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