• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MATLAB——文件读写(2)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、importdata函数

1、

txt 如图,提取经纬度。

程序如下

clear all
test=importdata(\'经纬度.txt\');
[r,c]=size(test.data);%row行,column列
a=max(size(test.data));%行
l=length(test.data);
for i=1:r
    lon(i)=test.data(i,8);%经度
    lat(i)=test.data(i,7);
end
plot(lon,lat);
xlabel(\'经度\',\'fontsize\',13,\'fontweight\',\'bold\');
ylabel(\'纬度\');
title(\'轨迹\')  grid on

      

可以看出importdata将读取的数据生成了一个struct结构体,结构体将txt中的数据分类。所用的数据如下

循环调用经纬度可以画出如图所示的图像。

 2、

clear all
a=importdata(\'road.png\')
image(a)

二、excel写入

clear all
filename = \'testdata.xls\';
A = [12.7 5.02 -98 63.9 0 -.2 56];
xlswrite(filename,A)

 

clear all
filename = \'testdata.xls\';
A = [12.7,5.02,-98;63.9,0.2,56];
xlswrite(filename,A)

 

clear all
filename = \'testdata.xlsx\';
A = {\'Time\',\'Temperature\'; 12,98; 13,99; 14,97};
sheet = 2;%第几个表格
xlRange = \'E1\';%第一个位置
xlswrite(filename,A,sheet,xlRange)

 

三、Excel读取

1、

数据格式是文本类型

clear all
a=xlsread(\'气象生态环境监测系统报表0102.xls\');
[num,txt,raw] = xlsread(\'气象生态环境监测系统报表0102.xls\')

可以看出返回的及时元胞数组,a中是空的,因为Excel中没有数据类型,只有文本,对比可以看出下面的num中也是空的。所以计算或者画图时需要转换文本格式。

2、

clear all
a=xlsread(\'气象生态环境监测系统报表0102.xls\');
[num,txt,raw] = xlsread(\'气象生态环境监测系统报表0102.xls\');
date=txt(4:end,1);%读取日期
tem=txt(4:end,7);%读取温度
date(end-1:end)=[]%去除无效数据

 日期670和671是没有数据的,通过[]去除。温度同理。再有,通过end,可以任意读取某一行到最后的行和列的内容。

3、剔除异常值

clear all
a=xlsread(\'0102.xls\');
[num,txt,raw] = xlsread(\'0102.xls\');
date=txt(4:end,1);%读取日期
tem=txt(4:end,7);%读取温度
date(end-1:end)=[];%去除日期空数据
tem(end-1:end)=[];%去除温度空数据

n=datenum(date,\'yyyy-mm-dd HH:MM\');%日期数字
t=str2num(char(tem));%将cell类型,转换成double类型

s=length(t);
w=1+0.4*log(s-2);
a=mean(t);%均值
e=std(t);%标准偏差
yichang=abs(t-a)>w*e; %判断语句,肖威勒方法,返回0或者1.
t(yichang)=a;  %将异常值重新赋值

figure
subplot(211),plot(n,t);
subplot(212),plot(n,t);
datetick(\'x\',\'HH:MM\');%更改坐标形式
grid on

 

 

四、多文件读取

 1、

clear all
dirs=dir(\'C:\Users\Administrator\Desktop\test\*.xls\')

生成这样一个结构体,只需要将名字提取出来,然后循环提取就可以处理这个文件夹下的所有的xls文件了。注意正则表达式的应用。

clear all
dirs=dir(\'C:\Users\Administrator\Desktop\test\*.xls\');
l=length(dirs);

for i =1:l
    names{i}=dirs(i).name;
    [num{i},txt{i},raw{i}] = xlsread(names{i});
    date{i}=[txt{i}(4:end,1)];%读取日期
    tem{i}=[txt{i}(4:end,7)];
    date{i}(end-1:end)=[];
    tem{i}(end-1:end)=[];
    d{i}=datenum(date{i},\'yyyy-mm-dd HH:MM\');
    t{i}=str2num(char(tem{i}));
    
    figure
    plot(d{i},t{i});
    datetick(\'x\',\'HH:MM\');
    grid on
    %filename=[names{i} \'.jpg\'];
    saveas(gcf,[names{i} \'.jpg\']);%注意空格,否则出错
end

注意保存时字符串和图片符号之间的空格,否则出现如下错误。

 

 

 

 

 

 

 

 

 

 

2、

>> dirs(1) ans = name: \'气象生态环境监测系统报表0101.xls\' date: \'02-一月-2017 09:04:38\' bytes: 436151 isdir: 0 datenum: 7.3670e+05 >> dirs{1} 元胞内容引用自非元胞数组对象。

需要根据对方的类型选择大括号和小括号。

 

>> a=txt(1)

a = 

    {556x36 cell}

>> a=txt{1};

可以看出用{}比()提前一步获取cell中的信息。

a=txt{1}
b=a(:,1)

b(1:3)=[]

>> b{end-1:end}=[]
需要大括号或点索引表达式中的一个输出,但结果有 2 个。

 无效的空赋值。’

 

a=txt(1)

b=a{:,1}

 

殊途同归。

 3、保存形式

所以能用下标访问

 五、mat 文件生成读写

 

clear all

sheng=shaperead(\'maps/bou2_4p.shp\', \'UseGeoCoords\', true)
geoname=[sheng.NAME]

生成了一个字符串 

clear all

sheng=shaperead(\'maps/bou2_4p.shp\', \'UseGeoCoords\', true)
geoname=sheng.NAME

只有黑龙江省

 

clear all

sheng=shaperead(\'maps/bou2_4p.shp\', \'UseGeoCoords\', true)
geoname={sheng.NAME}

 

生成元胞数组

 

clear all

p=shaperead(\'maps/bou2_4p.dbf\');
l=length(p);
 
 for i=1:l
   a{i}=p(i).NAME; %读取省份,注意用元胞数组保存,否则保存不了
 end
 
 a=a\';  %转置
 save mydata a % 保存为dat文件

双击,载入mydata.mat 文件

六、时间异常处理

Excel如下

clear;clc;close all
[Das,Xls]=xlsread(\'中心80.xlsx\');  % 依次得到.xls的数据,文本矩阵,存放在IMs元胞数组里
Das(1,1)
Xls(1,1)

 

接下来将时间格式转换下

datestr(Xls{1,1},29)

出现这种情况的原因是还有星期二文本,所以失败,正确程序如下

datestr(Xls{1,1}(1:8),29)%只读取星期二之前的数据

 

将时分秒,从double类型,变为时分秒类型 21:26:05

Das(1,1)
datestr(Das(1,1),\'HH:MM:SS\')

出现差错

s=mod(Das(1,1),100)
m=(mod(Das(1,1),10000)-s)/100
h=floor(Das(1,1)/10000)

分别提取出时分秒

t=hours(h)+minutes(m)+seconds(s)
datestr(t,\'HH:MM:SS\')

还原出时分秒

七、图片读取保存

(1)读取

clear all
[filename,pathname]=uigetfile({\'*.jpg\';\'*.bmp\';\'*.gif\'},\'选择图片\');
if isequal(filename,0)
    disp(\'Users Selected Canceled\');
else
str=[pathname filename];
im = imread(str);
imshow(im);
end

(2)保存

clear all
x=0:0.01:2*pi;
plot(x,sin(x));

[filename,pathname]=uiputfile({\'*.bmp\';},\'保存图片\');%路径和图片名
if ~isequal(filename,0)
    str = [pathname filename];%路径名
    data= getframe(gcf);%图片内容数据
    imwrite(data.cdata,str,\'bmp\');%数据,文件名,图片格式
%     saveas(gcf,str,\'bmp\');%两种方式都可以保存图片,gcf返回当前图片句柄
    close(gcf);
 else
    disp(\'保存失败\');
end

(3)imwrite函数

clear all
A = rand(50);
imwrite(A,\'C:\Users\ning wang\Desktop\123.jpg\')

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap