我有超过一千个矩阵(6 x 2000,ASCII文件,逗号分隔)是从MATLAB生成的。 我想获取每个矩阵/文本文件的最后一行,并将它们保存在新的矩阵/文本文件中。 文本文件有疯狂的名称,所以当我加载它们时,我可以命名它们。 现在我会这样做来实现我的目标:
% A = load('crazyname.txt');
% B = load('crazynameagain.txt');
% C = load('crazynameyetagain.txt');
A = [5 5 5; 5 5 5; 1 1 1];
B = [5 5 5; 5 5 5; 2 2 2];
C = [5 5 5; 5 5 5; 3 3 3];
D(1,:)=A(end,:);
D(2,:)=B(end,:);
D(3,:)=C(end,:);
我将通过组合文本单元格来创建命令,从而在Excel中创建每个命令(例如加载,逐步构建D)。 有没有更好的方法可以做到这一点? 我是否可以加载/分配矩阵的名称更适合它们在 for 循环中使用? 还是其他一些 MATLAB 命令可以促进这一点?
谢谢。
假设您在文件夹 d:/tmp
中拥有所有csv
文件,每个文件都包含6x2000
:
folder = 'd:/tmp';
files = dir(fullfile(folder, '*.csv'));
res = cell2mat(cellfun(@(x) csvread(fullfile(folder, x), 5, 0), {files.name}', 'UniformOutput', false));
请注意 csvread()
的参数。
编辑:如果分隔符是空格' '
:
res = cell2mat(cellfun(@(x) dlmread(fullfile(folder, x), ' ', 5, 0), {files.name}', 'UniformOutput', false));
如果文件名有通用架构,则可以使用 dir 函数获取它们的列表。从那里,一次加载一个并将它们放入数组中。您还需要首先知道有多少人,以进行预分配。完成后,这可能会缩小。把它们放在一起,你就有了这样的东西。
files=dir ('c:/somefolder/*.txt')
output=zeros(2000,length(files));
usedValue=false(zeros(1,length(files)));
for i=1:length(files)
if (~files(i).isdir)
dat=load(files(i).name);
usedValue(i)=true;
output(:,i)=dat(end,:);
end
end
output=output(:,usedValue);
请注意,您可以在 if 语句中对文件进行一些额外的检查,以确保文件名正确。