這幾天不斷有人詢問,如何批量把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