Matlab批量处理xls,matlab批量处理excel(CSV)⽂件数据今天是2019-1-29,参加完2019年美国⼤学⽣数学建模竞赛,⼩伙伴都回家了,就我⼀个⼈在寝室,太⽆聊了,就把在⽐赛中遇到的excel批处理,写⼀下思路(ps:其实我在⽐赛中 利⽤的是SQLServer数据库和matlab相结合的数据处理⽅法,但是⼀般情况下遇到的都是matlab对excel数据批处理,所以降低要求写了matlab对excel数据批处理,此思路都是⼩编凭感觉⾃⼰摸索出来的,如有错误欢迎指出)。
今天介绍怎么批量读取excel⽂件的数据,⾸选我把excel⽂件名称分为以下⼏种情况(全凭个⼈经验,⽐如读取图⽚⽂件,txt⽂件思路⼤同⼩异,希望我的思路起到抛砖引⽟的效果)
1.有规律的数值型名字
%date:2019-01-29-夜晚
%author:猪猪侠
%邮箱:2377389590@qq
clear %清除变量
clc%清屏
filename=dir('*.xlsx');%获取全部的.xlsx⽂件
n=length(filename);%⽂件数⽬
for i=2010:2010+n-1%也就是2010:2014
%思路:声明三维数组储存数据
%[int2str(i),'.xlsx']是为了遍历excel⽂件
[Num(:,:,i-2010+1),TxT(:,:,i-2010+1),Raw(:,:,i-2010+1)]=xlsread([int2str(i),'.xlsx'])
end
运⾏结果:
2. 有规律的数值型+相同⽂本的名字
%date:2019-01-29-夜晚
%author:猪猪侠
%邮箱:2377389590@qq
clear %清除变量
clc%清屏
filename=dir('*.xlsx');%获取全部的.xlsx⽂件
n=length(filename);%⽂件数⽬
for i=2015:2015+n-1%也就是2015:2019
%思路:声明三维数组储存数据
%['我是',int2str(i),'.xlsx']拼凑excel名称的字符串是为了遍历excel⽂件
[Num(:,:,i-2015+1),TxT(:,:,i-2015+1),Raw(:,:,i-2015+1)]=xlsread(['我是',int2str(i),'.xlsx']) end
运⾏结果
3. 没有规律的⽂本的名字
dir函数可以有调⽤⽅式为:
excel从入门到精通百度云dir('.') 列出当前⽬录下所有⼦⽂件夹和⽂件
dir('D:\Matlab') 列出指定⽬录下所有⼦⽂件夹和⽂件
dir('*.xlsx') 列出当前⽬录下符合正则表达式的⽂件夹和⽂件
得到的为结构体数组每个元素都是如下形式的结构体:
name -- filename
date -- modification date
bytes -- number of bytes allocated to the file
isdir -- 1 if name is a directory and 0 if not
datenum -- modification date as a MATLAB serial date number
%date:2019-01-29-夜晚
%author:猪猪侠
%邮箱:2377389590@qq
clear %清除变量
clc%清屏
filename=dir('*.xlsx');%获取全部的.xlsx⽂件
n=length(filename);%⽂件数⽬
for i=1:n
name=filename(i).name;
[Num(:,:,i),Txt(:,:,i),dict(:,:,i)]=xlsread(['',name,''])%批量读取数据end
源码:
提取码:yr2c
记得点赞和关注是对我最⼤的⿎励
实战案例1
2019-5-20今天没事突然想继续更新这篇博客
我⾸先介绍我在数据处理遇到的问题
1.我这⾥有93个.csv⽂件,要按照需求批量处理csv⽂件数据,然后批量输出excel⽂件,且⽂件名不变。
2.每个csv⽂件如下图所⽰,第⼀列的数据和第⼆列的“ ;”前的数据组成数据,第⼆列“ ;”后⾯数据和第三列数据按照要求组成数据⽐如:6025和57组成6025.57,
13和290组成13+290/1000=13.29
剩下数据以此规律类推;
3.每⼀个数据表会有*******作为分割线,分割线前⾯的数据为需要按照以上⽅法处理的数据,分割线位置是随机变化的
难点:1.字符串拼接问题(主要涉及num2str,cell2mat,chr,str2double ,find ,isnan等函数)
2.数据⽂件的批量读⼊和输出
3.异常处理atch
代码如下:
%author:猪猪侠
%E-mail:2377389590@qq
clear %清除变量
clc%清屏
s=what;
p=s.path; %当前⽬录
filename=dir([p,'\data\','*.csv']);%获取data⽂件夹下⾯全部的.csv⽂件
n=length(filename);%⽂件数⽬
for i=1:n
name=filename(i).name;%⽂件 名称遍历循环
[Num,Txt,Raw]=xlsread([p,'\data\',name]);%读取数据
index=find(isnan(Num(:,1)));
%% ---------对特殊数据表进⾏处理-----------------------------------------------------------------------------
try%异常出错处理
chr=cell2mat(Raw(1:index(1,1)-1,2));
catch
data1=ones(1,index(1,1)-1);%声明空间
data2=ones(1,index(1,1)-1);%声明空间
for j=1:index(1,1)-1
data1(j)=str2double([num2str(cell2mat(Raw(j,1))),'.',chr(j,1:2)]); %对第⼀列数据和第⼆列数据进⾏字符串拼接
data2(j)=str2double(chr(j,8:9))+str2double(num2str(cell2mat(Raw((j),3))/1000));%对第2列数据和第3列数据进⾏字符串拼接end
data=[data1',data2'];%拼接后的数据
xlswrite([p,'\result\',strtok(name,'.'),'.xlsx'],data)%输出特殊数据表
end
%% ---------对符合规范的数据表进⾏处理-------------------------------------------------------------------------
data1=ones(1,index(1,1)-1);
data2=ones(1,index(1,1)-1);
for j=1:index(1,1)-1
data1(j)=str2double([num2str(cell2mat(Raw(j,1))),'.',chr(j,1:2)]);
data2(j)=str2double(chr(j,8:9))+str2double(num2str(cell2mat(Raw((j),3))/1000));
end
data=[data1',data2'];
xlswrite([p,'\result\',strtok(name,'.'),'.xlsx'],data)
end
数据我已经上传⾥欢迎加获取
实战案例2,
前⼏天在家陪⽼舅钓鱼,没掉⼏条,备受打击,所以今天不去了,2019-8-16今天没事⼲所以继续更新这篇博客,思路如下。
我这⾥有三个Excel数据⽂件,⽂件名称为⽆序没有规律的
要获取三个Excel⽂件Data表单的全部数据,拼接在⼀起,然后共⽤⼀个表头,经过分析三个Data数据的列数是⼀样的,不⼀样的是⾏数,这样难点就是怎么动态的获取⾏数,然后再拼接在⼀起。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论