这几天不断有人询问,如何批量把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