新浪博客

一个用matlab批量处理txt文件数据的例子

2013-09-05 01:37阅读:
刚刚完成的一个批量处理txt文件的算法,思路比较简单,但有txt文件中混合着数值和字符。所以在完成数值提取遇到了一定困难。但最终,在鸟贤协助下用了一种比较笨的方法做出来了,算法的执行效率不算高,接下来有时间我会将它改写成 并行计算的版本。
所处理的数据是1961年到2010年间的全国温度数据,总计600个txt,需要将txt中混杂的的数值数据提取出来,并且去除一部分无效数据,然后再做其他的数据分析工作。主要代码如下,已经做好了注释,复制并改掉相应于的文件属性,可以直接运行。
function [varargout]= htemperature(varargin)
clc;
clear all;
%因为温度统计文件有多600个,且命名具有一定的规律性,所以可以使用循环读取文件
time=196100;
for f = 1:12 %对600个文件进行循环
sname = 'D:\mean\SURF_CLI_CHN_TEM_MON_GRID_0.5-MEAN-';
if mod(f,12)==1 & f>1
time = time +89;%跳到第二年1一月份
else
time=time+1;
end
sname=[sname num2str(time)];
sname=[sname '.txt']; %此时sname就是一个完整的路径与文件名;
% hcell = importdata(sname);%将产生两个数值和非数值元胞,此处不用textread的原因是列数太多
% fmatrix = hcell.data;
% 原文件分布不规则,弃用元胞,且textread,importdata读取函数皆要求数据分布规则故采用
k=0;
r=0;%计数器
hcell=importdata(sname);%读入数据
[m,n]=size(hcell.textdata);%统计包含字符的向量
j=1;%字符转数值的计数器
for x = 1:m
htext = cell2m
at(hcell.textdata(x));
hdata=str2num(htext);%如果是字符,执行之后将变成空矩阵
if ~ischar(hdata) & ~isempty(hdata)
textvector(j) = hdata;
j=j+1;
end
end
%至此完成字符元胞的数值化
for y = 1:6
hcell.data(y)=[];
end
%完成图像属性信息的删除
%将两个向量完成合并
fvector=[textvector hcell.data'];
% for i=1:m
% b=cell2mat(a.textdata(i));
% c=str2num(b);
% if ~ischar(c) & ~isempty(c) & c
% d(j)=c;
% j=j+1;
% end
% end
for i =1:size(fvector,2)
if fvector(i)~=-99 & fvector(i)~=-198
k=k+fvector(i);
r=r+1;
end
end
mean=k/r;
meanvector(f)= mean;
sumvector(f)=k;
timevector(f)=time;
end
meanvector
sumvector
timevector
xlswrite('D:\dd.xls',meanvector','C2:C13')
xlswrite('D:\dd.xls',timevector'kh','B2:B13')%写入到excel

我的更多文章

下载客户端阅读体验更佳

APP专享