matlab批量处理mat

这几天不断有人询问,如何批量把txt转为mat格式。mat格式存储占的空间小。

这里以中国气象局的站点数据为例,转换程序如下:

clc %清屏

clear %清内存变量

filenames = ls(‘*.txt’);%以字符串数组的形式列出该路径下所有的txt文件

[m n] = size(filenames);%获取filenames的行列数

for j = 1:m

fid=dlmread(char(filenames(j,:)));

matname=char(filenames(j,1:6));

save(matname,’fid’);%转为mat格式

% xlswrite(matname,fid);%转为xls格式

JDT=[matname,’转换完毕!’];

disp(JDT)

end

在以上程序转换完毕之后,需要把多个mat格式合并成一个文件:

clc %清屏

clear %清内存变量

filenames = ls(‘*.mat’);%以字符串数组的形式列出该路径下所有的txt文件

[m n] = size(filenames);%获取filenames的行列数

g=[];

for j = 1:m

d=load(filenames(j,:));

e=struct2cell(d);

f=cell2mat(e);

clear d e;

g=cat(1,g,f);

end

save(‘dailyPrecipitation’,’g’);

也有人需要按照站点存储数据,这个程序在之前的文章讲到过。程序如下:

clc %清屏

clear %清内存变量

filenames = ls(‘*.mat’);%以字符串数组的形式列出该路径下所有的txt文件

[m n] = size(filenames);%获取filenames的行列数

for j = 1:m

g=load(filenames(j,:));

e=struct2cell(g);

clear g;

f=cell2mat(e);

clear e; 

aa=f(:,10);

aa(aa>20000)=0;

f(:,10)=aa./10;    

f=sortrows(f,[1,5,6,7]);

[u v] = unique(f(:,1));%查找第一列中不同的数及所在的位置

q = 1;

for i = 1:length(v)-1

    matname=num2str(u(i));

    r=f(q:v(i+1)-1,:);

    save([matname,'.txt'],'r','-ASCII');%写出

    q = v(i+1);

end

end

你可能感兴趣的:(Matlab)