• MATLAB——文件读写(2)


    一、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:UsersAdministratorDesktop	est*.xls')

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

    clear all
    dirs=dir('C:UsersAdministratorDesktop	est*.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
    ing wangDesktop123.jpg')
    

  • 相关阅读:
    HDU4003 Find Metal Mineral
    POJ1125 Stockbroker Grapevine
    HDU4028The time of a day
    弱校ACM奋斗史
    POJ1236 Network of Schools
    HDU4004 The Frog's Games
    HDU4001 To Miss Our Children Time
    POJ2186 Popular Cows
    POJ1094 Sorting It All Out
    hadoop2.7.1单机和伪集群的搭建0
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/7643370.html
Copyright © 2020-2023  润新知