精华内容
下载资源
问答
  • matlab读取文本文件

    千次阅读 2013-04-13 22:39:27
    今天需要做个matlab读取txt文件,在网上收集了下,查到了几篇不错的,总结一下,方便大家(包括me)使用: 下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以...

     

    matlab 中如何读取文本文件

    今天需要做个matlab读取txt文件,在网上收集了下,查到了几篇不错的,总结一下,方便大家(包括me)使用:

    下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以。

    function dataout=dataread(filein,fileout,line)

    fidin=fopen(filein,'r');

    fidout=fopen(fileout,'w');

    nline=0;

    while ~feof(fidin) % 判断是否为文件末尾

    tline=fgetl(fidin); % 从文件读行

    nline=nline+1;

    if nline==line

    fprintf(fidout,'%s\n',tline);

    dataout=tline;

    end

    end

    fclose(fidin);

    fclose(fidout);

    %%%%%%%%%%%%%%%%%%%%%%%%%%

    调用格式:dataout=dataread(filein,fileout,line)

    如果你的txt文件数据是矩阵形式的,而没有其它的文字,用下面的程序就可以读任意行任意列的数据

    a=textread('ll.txt');

    t=a(1:43,4:10);

    1:43是1到43行,4:10是4到10列的数据,当然也可以只读一个数据,如果你的matlab没有textread函数,直接从mathworks网站下载就行。

    根据txt文档不同种类介绍不同的读取数据方法

    转自:http://hi.baidu.com/youngbrave/blog/item/878db31fcd4f220f304e15bb.html

    一、纯数据文件(没有字母和中文,纯数字)

    对于这种txt文档,从matalb中读取就简单多了

    例如test.txt文件,内容为“17.901 -1.1111 33.045

    17.891 -1.1286 33.045

    17.884 -1.1345 33.045”

    可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。

    二、中英文和数据如test1.txt

    “你好

    欢迎来到

    振动论坛

    vib.hit.edu.cn

    1 11 111 1111

    2 22 222 2222

    3 33 333 3333

    4 44 444 4444

    5 55 555 5555”

    这样的文件怎么读入数据呢?

    方法有多种,现举两个比较简单实用的。

    方法一:

    file/import data....../next/finish

    >> whos

    Name Size Bytes Class

    data 5x4 160 double array

    textdata 4x1 300 cell array

    Grand total is 54 elements using 460 bytes

    >> data

    data =

    1 11 111 1111

    2 22 222 2222

    3 33 333 3333

    4 44 444 4444

    5 55 555 5555

    >> textdata

    textdata =

    '你好'

    '欢迎来到'

    '振动论坛'

    'vib.hit.edu.cn'

    方法二:

    [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)

    说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。

    这里%s的个数和[a1,a2,a3,a4]对应。

    >> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)

    a1 =

    '1'

    '2'

    '3'

    '4'

    '5'

    a2 =

    '11'

    '22'

    '33'

    '44'

    '55'

    a3 =

    '111'

    '222'

    '333'

    '444'

    '555'

    a4 =

    '1111'

    '2222'

    '3333'

    '4444'

    '5555'

    因以字符串的形式读入,所以有''。

    ————————————————————————————————

    三、中文数据 英文 混乱如test.txt

    你好

    1 11 111 1111

    欢迎来到

    2 22 222 2222

    振动论坛

    3 33 333 3333

    vib.hit.edu.cn

    4 44 444 4444

    5 55 555 5555

    说明:这种内容格式的文件用上面的方法是不行的。

    以下是由chinamaker编写的一种方法:

    fidin=fopen('test.txt'); % 打开test2.txt文件

    fidout=fopen('mkmatlab.txt','w'); % 创建MKMATLAB.txt文件

    while ~feof(fidin) % 判断是否为文件末尾

    tline=fgetl(fidin); % 从文件读行

    if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值

    fprintf(fidout,'%s\n\n',tline); % 如果是数字行,把此行数据写入文件MKMATLAB.txt

    continue % 如果是非数字继续下一次循环

    end

    end

    fclose(fidout);

    MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来

    >> MK

    MK =

    1 11 111 1111

    2 22 222 2222

    3 33 333 3333

    4 44 444 4444

    5 55 555 5555

    展开全文
  • 此篇博客记录了用Matlab 读写各种文件的方法及示例,惊喜正在酝酿... 目前有文本文件(以txt为例),图片文件(png, jpg, tif, gif, bmp),nc,excle

    主博客:https://blog.csdn.net/Gou_Hailong/article/details/106092705

    【日志】
    2020/6/15
    早就想开这个博客了,一直没有用到 Matlab 读文件,这不最近要用 Matlab 读取 txt 文件,就先把这部分介绍一下。
    2020/8/19
    加了读文本文件的例子,将文章结构优化了一下,加了读取图片的方法。
    2020/8/20
    加了写图片文件,nc,excle。
    2020/10/29
    加入了一个读写geotiff的例子。
    2020/11/1
    加了一个txt存文件名,之后读txt的例子。

    一、读写文本文件

    以 txt 为例

    1.读

    常用的主要有以下几种方法:

    1.load 
    /*1.该函数只能加载仅含有数字的文本文件,如果文档中夹杂着字母或者文字,就会报错。
    2.支持的分割符有 “,”、“,”、“ ”、“	”...
    3.每行列数必须相等
    4.Data 是一个矩阵*/
    Data = load("filename.txt");
    
    2.importdata
    /*1.既可以读取数据又可以读取字符:
    Data.data矩阵里存放的是纯数字,
    Data.textdata矩阵里是以文本形式存放的所有数据。
    2.支持的分割符有 “ ”、“	”...
    3.个人感觉不太好用*/
    Data = importdata("filename.txt");
    
    3.textread
    /*它的基本语法是:
    [A,B,C,...] = textread(filename,format)
    [A,B,C,...] = textread(filename,format,N)
    其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
    中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。
    详细介绍如下博客链接*/
     textread(filename,'%s%f-%f-%f%f:%f%f',... %文件名用' ' ,格式       
            'headerlines',1,...        %忽略前1'delimiter'  ,';');        %分隔符为;         
    

    textread用法示例:https://blog.csdn.net/jisuanjiguoba/article/details/79997805


    补于2021-03-14
    下面是一个函数,用来读取空格分割的文本文件,将数据存到元胞数组中,但是太耗时,废弃不用,还是textread香啊!

    function Data=Txt2Cell(filename)
    fid=fopen(filename,'r');
    Data=cell(0);
    while ~feof(fid)
        line = fgetl(fid);
        if line(1)~='%'
            Data=[Data;strsplit(line)];
        end
    end
    fclose(fid);
    end
    ----------------------------------------
    [gW,sec,prn,AZ,El,SNR,MP]=textread(filename,'%d%f%s%f%f%f%f',...
        'headerlines',1,...
        'delimiter'  ,' ');
    

    2.写

    将数据写入 txt 需要用到 fopen、fprintf 函数,这就有点像C、C#了。

    FID = fopen(FILENAME,PERMISSION)
    /*FID 获取到的文件句柄
    FILENAME 文件名
    PERMISSION 打开方式*/
    
    fprintf(fid,format,A)
    /*fid为文件句柄,指定要写入数据的文件,
    format是用来控制所写数据格式的格式符,与fscanf函数相同,
    A是用来存放数据的矩阵。*/
    
    help('fopen')
    help('fprintf')
    doc fopen
    doc fprintf
    /*上面介绍的比较简单
    更详细的介绍可以通过这些命令查看*/
    

    3.例子

    例子1:这个例子是读写文本文件里边存着数据的那类。
    先写一下:

    clear; clc;
    r=1:1:10;
    results=[r;pi*r.^2];
    fid=fopen('draft.txt','w');                 %以写的方式打开/新建一个txt,
    fprintf(fid,'%7s %9s\r\n','Radius','Area'); %右对齐占位7,前不够补空格
    fprintf(fid,'%3d %11.4f\r\n',results);      %占位11,小数点后4位,前不够补空格
    results=results';
    fprintf(fid,'\n');
    fprintf(fid,'%3d %11.4f\r\n',results);
    fclose(fid);
    

    在这里插入图片描述


    这个例子说明了:matlab 写文件是按照列来存取数据的,为了后续读,把后面几行删了


    读:

    [R,Area]= textread('draft.txt','%3d %11.4f',... %文件名用' ' ,格式       
            'headerlines',1,...        %忽略前1'delimiter'  ,' ');        %分隔符为;  
    type draft.txt  %在命令窗口查看txt
    

    这步得到俩列向量。


    例子2:有时候由于批量操作某些文件,但是文件名字规律性不是很强,所以就需要将文件名字存到一个文本文档里边,然后读这个文件来获得文件名,这个例子是针对这种类型的。

    soupath='D:\matlab\mat\CHLA\sorce\'; %source
    year=[2010 2005 2020 2015];% 
    soufilename=[soupath,'filename.txt'];
    filename=textread(soufilename,'%s');  %将txt中的数据搞成元胞filename
    count=-1;
    for i=year
        count=count+1;
        for j=1:3
            str1=char(filename(count*4+j));  %注意这行,是将元胞转化为字符串。
            soufile=[soupath,str1,'.mat'];
            disp(soufile);
        end
    end
    

    结果如下:

    D:\matlab\mat\CHLA\sorce\chla_201001.mat
    D:\matlab\mat\CHLA\sorce\chla_201002.mat
    D:\matlab\mat\CHLA\sorce\chla_201003.mat
    D:\matlab\mat\CHLA\sorce\chla_201501.mat
    D:\matlab\mat\CHLA\sorce\chla_201502.mat
    D:\matlab\mat\CHLA\sorce\chla_201503.mat
    D:\matlab\mat\CHLA\sorce\chla_202001.mat
    D:\matlab\mat\CHLA\sorce\chla_202002.mat
    D:\matlab\mat\CHLA\sorce\chla_202003.mat
    D:\matlab\mat\CHLA\sorce\chla_202501.mat
    D:\matlab\mat\CHLA\sorce\chla_202502.mat
    D:\matlab\mat\CHLA\sorce\chla_202503.mat
    

    二、读写图片

    Matlab用来读取图像的函数是imread(),顾名思义image read,同样的道理写图片的函数是imwrite();


    图片的格式有(我去,竟然有那么多种图片格式,看来我是孤陋寡闻了)见于百度百科。常见的几种有:jpg, bmp, gif, tif, png等,其中几种简介如下:

    格式简介
    BMP格式Windows系统下的标准位图格式,未经过压缩,一般图像文件会比较大。在很多软件中被广泛应用.
    JPEG格式也是应用最广泛的图片格式之一,它采用一种特殊的有损压缩算法,将不易被人眼察觉的图像颜色删除,从而达到较大的压缩比(可达到2:1甚至40:1),因为JPEG格式的文件尺寸较小,下载速度快,所以是互联网上最广泛使用的格式!
    GIF格式最大的特点是不仅可以是一张静止的图片,也可以是动画,并且支持透明背景图像,适用于多种操作系统,“体型”很小,网上很多小动画都是GIF格式。但是其色域不太广,只支持256种颜色.
    PSD格式Photoshop的专用图像格式,可以保存图片的完整信息,土层,通道,文字都可以被保存,图像文件一般较大。
    PNG格式与JPG格式类似,网页中有很多图片都是这种格式,压缩比高于GIF,支持图像透明,可以利用Alpha通道调节图像的透明度,是网页三剑客之一Fireworks的源文件。
    TIFF格式它的特点是图像格式复杂、存贮信息多,在Mac中广泛使用的图像格式,正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制。很多地方将TIFF格式用于印刷.
    TGA格式TGA的结构比较简单,属于一种图形、图像数据的通用格式,在多媒体领域有着很大影响,在做影视编辑时经常使用,例如3DS MAX输出TGA图片序列导入到AE里面进行后期编辑。
    EPS格式苹果Mac机的用户则用得较多。它是用PostScript语言描述的一种ASCII码文件格式,主要用于排版、打印等输出工作。

    1.读

    Photo=imread(photofilenme);%读的话,这一行就搞定了
    Tif=imread('1.tiff');      %例子
    

    下面介绍一下我做的实验:

    • 我先用画图 3D 搞了几种格式(tif, jpg, bmp, png)的图片,图片内容都是下图:在这里插入图片描述
      然后,用 imread() 读取图片,都得到了91x317x3 uint8这样一个三维矩阵,之后又用 imshow() 显示图片,看到结果都是一样的。但是,得到的三维矩阵并不是完全相同的,我觉得可能是图片压缩方式不同导致的。至于为啥是三维的,很容易猜到,91x317x3对应行x列x页,即宽x长xRGB
    • 从网上找了个 gif, 看看在这里插入图片描述这个gif一共有71帧,用 imread() 读取图片,得到了298x395x1x71这样一个四维矩阵,之后又用 imshow() 显示图片,Info=imfinfo('1.gif'); 可查询图片信息。为啥第三维不是RGB呢?我晓得了,先看一下Info:在这里插入图片描述前面是一大堆其他信息,包括路径,时间等等。后面这有两列,一个是位深,一个是colortable, 2 5 = 32 2^5=32 25=32,想必你已经会了吧。显示第一帧的代码如下:
    Gif=imread('1.gif');%将gif搞到一个四维矩阵中
    Info=imfinfo('1.gif');%图片信息。
    mat=Gif(:,:,:,1);%第一帧,这时是二维的
    colortable=Info(1).ColorTable;%由于是5位,所以是32x3
    bit=size(colortable,1);
    [a,b]=size(mat);
    Rimg=zeros(a,b);
    Gimg=zeros(a,b);
    Bimg=zeros(a,b);
    for i=0:bit-1
        j=i+1;%由于mat是从0-31, so...
        Rimg(mat==i)=colortable(j,1);%找到mat中等于i的元素位置,然后Rimg相应位置填充元素colortable(j,1)
        Gimg(mat==i)=colortable(j,2);
        Bimg(mat==i)=colortable(j,3);
    end
    img=cat(3,Rimg,Gimg,Bimg);%将三个二维矩阵合成一个三维矩阵
    imshow(img);
    

    在这里插入图片描述

    • 总之,imread()非常之强大!!

    总结:

    mat=imread(filepath);%将图片读到矩阵mat中
    Info=imfinfo(filepath);%查看图片信息。
    imshow(mat);%显示图片
    img=cat(3,Rimg,Gimg,Bimg);%将三个二维矩阵合成一个三维矩阵
    Rimg(mat==i)=colortable(j,1);%找到mat中等于i的元素位置,然后Rimg相应位置填充元素colortable(j,1)
    

    这里提供一个小函数,用来根据二维矩阵(整数)和colortable 来画图。

    function showgif(mat,colortable)
    bit=size(colortable,1);
    [a,b]=size(mat);
    Rimg=zeros(a,b);
    Gimg=zeros(a,b);
    Bimg=zeros(a,b);
    for i=0:bit-1
        j=i+1;%由于mat是从0-31, so...
        Rimg(mat==i)=colortable(j,1);%找到mat中等于i的元素位置,然后Rimg相应位置填充元素colortable(j,1)
        Gimg(mat==i)=colortable(j,2);
        Bimg(mat==i)=colortable(j,3);
    end
    img=cat(3,Rimg,Gimg,Bimg);%将三个二维矩阵合成一个三维矩阵
    imshow(img);
    end
    

    如果要读的tif有好几页图片,可用

    Image=zeros(Height,Width,Slice);
    for i=1:Slice
        Image(:,:,i)=imread(filepath,i);                                  %%一层一层的读入图像
    end
    

    更多显示图片的方法:https://blog.csdn.net/Gou_Hailong/article/details/107619919

    2.写

    1.写简单tif, png, jpg, bmp

    imwrite(Tif,[num2str(1,'%04d'),'.tif']);
    imwrite(Tif,[num2str(1,'%04d'),'.png']);
    imwrite(Tif,[num2str(1,'%04d'),'.jpg']);
    imwrite(Tif,[num2str(1,'%04d'),'.bmp']);
    

    2.写gif,这里提供一个例子(来源于百度经验)

    clear;clc;
    figure %新建一张图
    axis([0 5 0 2])%定义x轴(从05)和y轴的范围(从02for i=1:4
        if i==1
            text(i,1,'百','fontsize',40,'color','red');%i=1时,写一个‘百’字
        end
        if i==2
            text(i,1,'度','fontsize',40,'color','green');%i=2时,写一个‘度’字
        end
        if i==3
            text(i,1,'经','fontsize',40,'color','blue'); %i=3时,写一个‘经’字
        end
        if i==4
            text(i,1,'验','fontsize',40,'color','black');%i=4时,写一个‘验’字
        end    
        picname=[num2str(i) '.fig'];%保存的文件名:如i=1时,picname=1.fig
        axis off;
        hold on % 写后面的字时,不把前面的字冲掉
        saveas(gcf,picname) %保存下中间结果,
    end
    stepall=4;
    for i=1:stepall
        picname=[num2str(i) '.fig'];
        open(picname)
    %     set(gcf,'outerposition',get(0,'screensize'));% matlab窗口最大化
        frame=getframe(gcf);  
        im=frame2im(frame);%制作gif文件,图像必须是index索引图像  
        [I,map]=rgb2ind(im,20);          
        if i==1
            imwrite(I,map,'baidujingyan.gif','gif', 'Loopcount',inf,'DelayTime',0.5);%第一次必须创建!
        elseif i==stepall
            imwrite(I,map,'baidujingyan.gif','gif','WriteMode','append','DelayTime',0.5);
        else
            imwrite(I,map,'baidujingyan.gif','gif','WriteMode','append','DelayTime',0.5);
        end  
        close all
        delete(picname);
    end
    

    在这里插入图片描述
    3.读写多维tif,可参考博客:

    https://blog.csdn.net/u013921430/article/details/79283305

    为了方便看,这里copy 一下:
    灰度tiff读写代码

    clear all
    clc;
     
    filepath='test.tif';                                         %%图像名称与路径
    Info=imfinfo(filepath);                                      %%获取图片信息并判断是否为tif
     
    tif='tif';
    format=Info.Format;
    if  (strcmp(format ,tif)==0)
        disp('载入的不是tif图像,请确认载入的数据');                %%确保载入的图像是tiff图像
    end
     
    Slice=size(Info,1);                                          %%获取图片z向帧数
    Width=Info.Width;
    Height=Info.Height;
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Image=zeros(Height,Width,Slice);
     
    for i=1:Slice
        Image(:,:,i)=imread(filepath,i);                         %%一层一层的读入图像
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:Slice
        J=uint8(Image(:,:,i));                                   %%一层一层写出图像 
        %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');
        imwrite(J,[num2str(i,'%04d'),'.tif']);
    end
    

    彩色tiff图像读写代码:

    clear all
    clc;
     
    filepath='test.tif';               %%图像名称与路径
    Info=imfinfo(filepath);                                      %%获取图片信息并判断是否为tif
     
    tif='tif';
    format=Info.Format;
    if  (strcmp(format ,tif)==0)
        disp('载入的不是tif图像,请确认载入的数据');                %%确保载入的图像是tiff图像
    end
    Slice=size(Info,1);                                          %%获取图片z向帧数
    Width=Info.Width;
    Height=Info.Height;
     
    Image=zeros(Height,Width,Slice*3);
     
    for i=1:Slice
        Image(:,:,(i-1)*3+1:i*3)=imread(filepath,i);                 %%一层一层的读入彩色图像
    end
    %%%%%%%%%%%%%%%%%%%%%
    图像处理操作
    %%%%%%%%%%%%%%%%%%%%%
    for i=1:Slice
        J=uint8(Image(:,:,(i-1)*3+1:i*3));                            %%一层一层写出图像 
        %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');
        imwrite(J,[num2str(i,'%04d'),'.tif']);
    end
    

    3.例子(geotiff)

    如何读取tif并且获取其经纬度信息;读取之后还要把它另存为另一个tif呢?这个问题问的可能有点作,但是我今天缺失要实现这个功能,因为我有一张tif的模板图片,还有很多张比较大的图片。我想把所有的图片都裁剪成和模板图片一样的大小,用arcgis或者envi的话会一个一个操作,太枯燥了,所以我想着能否用matlab帮我裁剪。话不多说,直接开整:

    file20150='G:\Light\data\annual\2015\20150.tif';
    Info0=geotiffinfo(file20150);  %将tif的信息都搞到一个叫Info0的结构体中
    img0=imread(file20150);        %读取图像的灰度信息
    

    第二行,得到的结构体如下:
    在这里插入图片描述
    里边包含的信息比较丰富,像坐标系(GCS)、分辨率(PixelScale)、经纬度(BoundingBox)等等,关于经纬度这个,下面记下笔记,真的很容易忘。
    在这里插入图片描述

    下面用imshow()显示一下矩阵:
    在这里插入图片描述
    如果正常读的话,

    file20150='G:\Light\data\annual\2015\20150.tif';
    Info0=geotiffinfo(file20150);
    img0=imread(file20150);  %数据的读取
    lat_min=Info0.BoundingBox(1,2);
    lat_max=Info0.BoundingBox(2,2);
    lon_min=Info0.BoundingBox(1,1);
    lon_max=Info0.BoundingBox(2,1);
    GeoRef = georasterref('Rastersize',size(img0),'Latlim',[lat_min,lat_max],'Lonlim',[lon_min,lon_max]);
    %数据的写出
    SST_Tif = 'G:\Light\data\annual\2015\20151.tif';
    %img1=imread(SST_Tif);  %数据的读取
    %Info1=geotiffinfo(SST_Tif);
    geotiffwrite(SST_Tif,img0,GeoRef)
    disp('finished');
    

    在这里插入图片描述
    可见,它是被上下翻转了一下,所以,我们要先提前翻转一下,再写入文件。
    在这里插入图片描述
    ok。再来对比一下,info信息:
    在这里插入图片描述
    可以看到,图片的大小发生了变化,其他信息保持不变。
    总结代码如下所示:

    file20150='G:\Light\data\annual\2015\20150.tif';
    Info0=geotiffinfo(file20150);
    img0=imread(file20150);  %数据的读取
    lat_min=Info0.BoundingBox(1,2);
    lat_max=Info0.BoundingBox(2,2);
    lon_min=Info0.BoundingBox(1,1);
    lon_max=Info0.BoundingBox(2,1);
    GeoRef = georasterref('Rastersize',size(img0),'Latlim',[lat_min,lat_max],'Lonlim',[lon_min,lon_max]);
    %数据的写出
    SST_Tif = 'G:\Light\data\annual\2015\20151.tif';
    %img1=imread(SST_Tif);  %数据的读取
    %Info1=geotiffinfo(SST_Tif);
    geotiffwrite(SST_Tif,flipud(img0),GeoRef);   %注意,这里上下翻转一下!!!!
    disp('finished');
    

    三、其他文件

    1.nc 文件

    其实 nc 文件也是文本文件,但是是比较专业化那种,matlab 专门提供了读取 nc 文件的函数。

    //nc文件的读取
    filename='A20160922016121.L3m_MO_SST_sst_4km.nc';
    ncdisp(filename);//展示文件包含的信息
    Lon = ncread(filename);//读取信息到Lon中
    

    2.excle

    a=xlsread('1.xlsx');  %[num,txt,raw]=xlsread(file,2);%num 存数字,txt 存文本,raw 存元胞(包含两者)。第2个表
    xlswrite('2.xlsx',a); %写
    help..                %更多用法
    

    若出现Excel Worksheet could not be activated.问题,
    解决办法:打开excel,“文件→选项→加载项→管理(位于界面坐下角)→点击选择COM加载项→转到→把可用加载项的√全部去掉“,之后重启 matlab 即可。
    在这里插入图片描述

    3.vbb2txt

    vbb文件是啥类型的文件呢?目前没有找到比较正规的解释,我好像是在大二时做行人检测的时候遇到过。vbb直接打开是乱码,所以需要借助一个vbb工具箱,把vbb转换成txt,工具箱链接下面会提供,还有一个数据集当时下的,压缩超nb,128M的直接压成了13M。


    工具箱:链接: https://pan.baidu.com/s/1ZdfH1kot7eT8DZbBaS1uYg 提取码: uub8
    数据集:链接: https://pan.baidu.com/s/1GpUI4P3lyGkBm56-oMtV4A 提取码: akq4

    下好工具箱解压后,将文件夹放在一个不常动的地方,我放在了D:\MATLAB\R2017a\toolbox中,然后打开matlab,点击set path(设置路劲),将vbb路径加进去就行了。测试是否成功的话,就在matlab命令空间敲help vbb,成功的话就不会报错。vbb转txt的话,下面提供一个函数:

    function vbb2txt(file,out)
    A = vbb( 'vbbLoad',file);%当然不要拘泥于此函数,具体问题具体分析,可以看看A是啥
    c=fopen(out,'w');
    for i = 1:A.nFrame
    	iframe = A.objLists(1,i);
    	iframe_data = iframe{1,1};
    	n1length = length(iframe_data);
        for j = 1:n1length
            iframe_dataj = iframe_data(j);
            if iframe_dataj.pos(1) ~= 0  %pos ?posv
                fprintf(c,'%d %s %f %f %f %f \r\n', i, 'person', iframe_dataj.pos(1), iframe_dataj.pos(2), iframe_dataj.pos(3), iframe_dataj.pos(4));
            end
        end
    end
    fclose(c);
    disp('Finished');
    end
    

    4.shp文件

    第一次接触shp文件是在大一时上CAD时接触的,那时候叫“形文件”。我目前理解中的shp文件有点像矢量图,它存储的是坐标,可无限放大,不会出现马赛克(不知道对不对,2020.8.22)。shp 包括一个主文件,一个索引文件,和一个dBASE表。

    文件名后缀描述
    主文件.shp主文件是一个直接存取,变量记录长度文件,其中每个记录描述一个有它自己的vertices列表的shape。
    索引文件.shx在索引文件中,每个记录包含对应主文件记录离主文件头开始的偏移,
    dBASE文件.dbfdBASE表包含 feature 一个记录的feature的特征。

    几何和属性间的一一对应关系是基于记录数目的。在dBASE文件中的属性记录必须和主文件中的记录是相同顺序的。


    读写代码

    shp=shaperead(filename); //这步搞出来一个shp结构体
    shapewrite(shp,filename);//这步搞出来三个文件,如上所述
    

    世界如此简单,更多详见help!

    参考/引用 文章

    [1] 仙女阳-CSDN博主:https://blog.csdn.net/wangyang20170901/article/details/79617881
    [2] 样young-CSDN博主:https://blog.csdn.net/jisuanjiguoba/article/details/79997805
    [3] 百度经验-https://jingyan.baidu.com/article/9f63fb917c09ecc8410f0e66.html
    [4] 不用先生-CSDN博主:https://blog.csdn.net/u013921430/article/details/79283305
    [5] 百度经验:https://jingyan.baidu.com/article/a378c960a47c24b3282830b7.html
    [6] csdn_funquiz-CSDN博主:https://blog.csdn.net/qq_38712026/article/details/78783422
    
    展开全文
  • MATLAB读取文件

    2021-01-26 17:09:18
    循环读取文件 path = ['G:\data']; dir_output=dir(fullfile(path,'*.dat')); filename={dir_output.name};...读写xlsx文件读取 分别将数值和字符存进DataNum和DataStr name=20180331; filename=['H:\EddyPro\out

    之前是写在OneNote里的,有自己的代码,也有参考别人的帖子总结的内容。

    循环读取文件

    path = ['G:\data']; 
    dir_output=dir(fullfile(path,'*.dat'));
    filename={dir_output.name};
    for i=1:length(filename)
        file=[path,filename{i}];
        data=load(file);
    end
    

    读写xlsx文件

    • 读取
    分别将数值和字符存进DataNum和DataStr

    name=20180331;
    filename=['H:\EddyPro\output\excel\',num2str(name),'.csv'];
    sheet=1;
    [DataNum, DataStr] = xlsread(filename,sheet);
    n=length(DataNum);
    

    [Data,DataText,DataCell]=xlsread(‘new.xls’,‘Sheet1’)
    DataCell是全部的cell cell 格式
    Data带有NAN(代表字符)的全部元素 double 格式
    DataText 只包含字符
    [,,DataCell]=xlsread(‘new.xls’,‘Sheet1’);

    • 写入

    %write
    filename=[path,'MODIS_LST_LAC_T2019'];
    data=[cellsta(time),num2cell(temp)];
    xlswrite(filename,data);
    

    读写二进制文件

    • fopen打开文件

    fid=fopen(文件名,读写方式);
    fileID = fopen(filename,permission)
    fid:用于存储文件句柄值;小于0表示打开失败;大于0表示打开成功;
    文件名:以字符串的形式书写(注意需要单引号);
    读写方式包括:
    ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
    ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
    ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
    ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
    ‘a’:在打开的文件末端添加数据。文件不存在则创建。
    ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。
    注意:在打开方式后加’t’表示以文本方式打开;加‘b’表示以二进制数据方式打开;‘wb’‘wt’fopen默认以二进制方式打开;
    在这里插入图片描述

    • fread读取数据

    [data,count]=fread(fid,size,数据类型);
    o output arguments
    data:文件数据,作为列向量返回,如果指定sizeA参数,返回矩阵。默认double
    count:读取字符数
    o input arguments
    fid:句柄值;
    size:表示读取内容的大小;
    N	(读取N个元素到一个列向量)inf	(读取整个文件)[M,N]	(读数据到M×N的矩阵中,数据按列存放)

    数据类型precision
    Value Type	Precision	Bits (Bytes)Integers, unsigned	uint	32 (4)uint8	8 (1)uint16	16 (2)uint32	32 (4)uint64	64 (8)uchar	8 (1)unsigned char	8 (1)ushort	16 (2)ulong	32 (4)ubitn	1 ≤ n ≤ 64Integers, signed	int	32 (4)int8	8 (1)int16	16 (2)int32	32 (4)int64	64 (8)integer*1	8 (1)integer*2	16 (2)integer*4	32 (4)integer*8	64 (8)schar	8 (1)signed char	8 (1)short	16 (2)long	32 (4)bitn	1 ≤ n ≤ 64Floating-point numbers	single	32 (4)double	64 (8)float	32 (4)float32	32 (4)float64	64 (8)real*4	32 (4)real*8	64 (8)Characters	char*1	8 (1)char	Depends on the encoding scheme associated with the file.

    o 读取多种precision二进制文件 eg:
    %# type and size in byte of the record fields
    recordType = {‘double’ ‘double’ ‘int32’ ‘int8’ ‘char’};
    recordLen = [8 8 4 1 1];
    R = cell(1,numel(recordType));

    %# read column-by-column
    fid = fopen(‘file.bin’,‘rb’);
    for i=1:numel(recordType)
    %# seek to the first field of the first record
    fseek(fid, sum(recordLen(1:i-1)), ‘bof’);

    %# % read column with specified format, skipping required number of bytes
    R{i} = fread(fid, Inf, [’*’ recordType{i}], sum(recordLen)-recordLen(i));
    end
    fclose(fid);

    • fwrite写入数据
    count=fwrite(fid,data,数据类型);
    fid:表示文件句柄值(打开的文件的句柄值);
    data:需要写入的数据
    数据类型:double、float、int等等
    count:返回所写入元素的个数(可省略)

    • fclose(fid)关闭文件
    在对文件进行完读写操作以后需要关闭文件,防止数据丢失或者损坏。

    读写文本文件(ASCII)

    • fscanf(≈fread)/txt也可以直接load(不适宜一行多个数据)
    [A,COUNT]=fscanf(fid,format,size)
    A用来存放读取的数据,
    COUNT返回所读取的数据元素个数,可省略
    fid为文件句柄
    format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。
    size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。
    • fprintf(≈fwrite)
    fprintf(fid,format,A)
    fid为文件句柄,指定要写入数据的文件
    format是用来控制所写数据格式的格式符,与fscanf函数相同
    eg:%6.3f’是指保存格式,6是指数据保存间隔,一般设置为有效数字位数+2,3是指小数点后几位,若是要换行就在后面加上\n
    %d整数 %e实数:科学计数法 %f实数:小数 %g实数:自动 %s字符串
    A是用来存放数据的矩阵。
    eg: >> a=‘string’;

    fid=fopen(‘d:\char1.txt’,‘w’);
    fprintf(fid,’%s’,a);
    fclose(fid);

    数据定位

    • fseek用于定位文件位置指针(从特定位置开始读取)
    status=fseek(fid, offset, origin)
    fid为文件句柄
    offset表示位置指针相对移动的字节数

    0 Move toward the end of the file.
    = 0 Do not change position.
    < 0 Move toward the beginning of the file.
    origin表示位置指针移动的参照位置
    ‘bof’ or -1 Beginning of file
    ‘cof’ or 0 Current position in file
    ‘eof’ or 1 End of file。
    若定位成功,status返回值为0,否则返回值为–1。
    • ftell 返回文件指针的当前位置
    position=ftell (fid)
    返回值为从文件开始到指针当前位置的字节数。
    若返回值为–1表示获取文件当前位置失败。

    nc数据读写

    %% 显示结构
    % ncdisp(ncFilePath);%显示nc文件的所有结构,以便大概了解里面的内容
    % ncdisp(ncFilePath,‘evap’);%显示指定变量的内容,注意一定要是变量variables才可以
    % ncdisp(ncFilePath,’/’,‘min’);%简单显示结构以及定义
    % ncdisp(ncFilePath,’/’,‘full’);%全部显示所有结构和定义信息

    %% 读取变量值
    % ncid = netcdf.open(ncFilePath,‘NOWRITE’); %打开nc文件返回索引ID
    % [ndims,nvars,ngglobalatts,unlimdimid] = netcdf.inq(ncid);%获取维数,变量数,全局属性数量(此处ncid从0开始为第一个变量)
    % [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,0); %根据变量索引号获取变量的名称
    %var=ncread(ncFilePath,‘varname’);%读取变量,ncread读出结果为真实值,即自动将fillvalue记为nan,vardata*scale+offset

    %% 显示数据
    % pcolor(lat,lon,evap1);
    % [x,y]=meshgrid(lon,lat);%根据经纬度信息产生格网,284列(经度),164列(纬度)
    % phandle=pcolor(x,y,evap1’);%显示一个矩阵,其中x,y,evap1的行列数必须一致。类似surface函数
    % colorbar

    %%time
    在处理气象nc格式数据时,时间变量往往不是已YYYYMMDD格式给出日期,而是距某一天(如1900年1月1日)XXX小时或XXX日。
    可由以下代码将nc的时间变量转为日期:
    t0 = datetime(1900,1,1);
    date_yyymmdd = t0 + double(time(😃)/24; %time为距1900年1月1日00时的小时数一维数组
    %转回nc格式
    time=time_matlab;
    time_nc=(time-datenum(‘1900-01-01 00:00:00.0’))*24;

    eg:

    dat_filename=[path,'MOD11A1.006_1km_aid0001.nc'];
    ncid = netcdf.open(dat_filename,'NOWRITE');
    %ncdisp(dat_filename) %查看nc文件结构
    [~,nvars,~,~] = netcdf.inq(ncid);%获取变量数
    for i=1:nvars %vars
        varname{i}= netcdf.inqVar(ncid,i-1);%id从0开始
        eval([varname{i},'=ncread(dat_filename,varname{i});']);
    end
    netcdf.close(ncid)
    clear i 
    

    %%写入nc
    % ---------------------------- DEFINE THE FILE --------------------------- %
    ncid = netcdf.create(‘f:\ncl\ecco_ekman_mon_mean1.nc’,‘CLOBBER’);
    %创建一个存放数据的nc文件

    %-----------------------------define dimension-----------------------------%
    %因为有个变量是三维的,所以定义了三个维度,其它一维二维可视具体情况定义
    dimidx = netcdf.defDim(ncid,‘lat’,242);
    dimidy = netcdf.defDim(ncid,‘dep’,50);
    dimidz = netcdf.defDim(ncid,‘time’,12);

    %----------------------------define new variables---------------------------------%
    varid = netcdf.defVar(ncid,‘strf’,‘double’,[dimidx dimidy dimidz]);
    varid2 = netcdf.defVar(ncid,‘lat’,‘double’,[dimidx]);
    varid3 = netcdf.defVar(ncid,‘dep’,‘double’,[dimidy]);

    %---------------------------define attributes of the new variables--------------%
    netcdf.putAtt(ncid,varid,‘units’,‘Sv’); %单位信息和long_name,其它的信息可依此定义
    netcdf.putAtt(ncid,varid2,‘units’,‘degress_north’);
    netcdf.putAtt(ncid,varid3,‘units’,‘m’);

    netcdf.putAtt(ncid,varid,'long_name','The Meridional streamfunction ');
    netcdf.putAtt(ncid,varid2,'long_name','Latitude');
    netcdf.putAtt(ncid,varid3,'long_name','Depth');
    netcdf.endDef(ncid);
    

    %--------------------------给新变量赋值-------------------------------------------%
    netcdf.putVar(ncid,varid,fail_mon_mean);
    netcdf.putVar(ncid,varid2,lat);netcdf.putVar(ncid,varid3,d);
    netcdf.close(ncid);

    展开全文
  • c/c++、MATLAB读写文件

    2020-11-27 20:35:39
    1 c读写文件 1.1 c读文件 1.2 c写文件 2 c++读写文件 2.1 c++读文件 2.2 c++写文件 3MATLAB读写文件 3.1 MATLAB文件 3.2 MATLAB文件

    目录

    1 c语言读写文件

    1.1 c语言写文件

    1.2 c语言读文件

    2 c++读写文件

    2.1 文本文件

    2.1.1 写文件

    2.1.2 读文件

    2.2 二进制文件,bin文件

    2.2.1 写文件

    2.2.2 读文件

    3 MATLAB读写文件

    3.1 MATLAB读文件

    3.2 MATLAB写文件


    引用参考:菜鸟教程

    打开文件

    使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:

    FILE *fopen( const char * filename, const char * mode );

    在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:

    模式描述
    r打开一个已有的文本文件,允许读取文件。
    w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
    a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
    r+打开一个文本文件,允许读写文件。
    w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
    a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

    如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

    "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

    关闭文件

    关闭文件,使用 fclose( ) 函数。函数的原型如下:

     int fclose( FILE *fp );

    1 c语言读写文件

    1.1 c语言写文件

    写入txt文件

    #include "stdlib.h"
    #include<stdio.h>
    
    int saveDataToTXT(double y[], int length, const char* filePath) {
    	int i = 0;
    
    	FILE *fp;
    	fp = fopen(filePath, "wb"); //数据导出
    	if (fp == NULL)
    	{
    		printf("cant open the file");
    		exit(0);
    	}
    
    	for (i = 0; i<length; i++) {
    		fprintf(fp, "%.2f\n", y[i]);	
    	}
    	fclose(fp);
    	return 0;
    }
    
    int main()
    {
    	const char* filePath = "test.txt";
    	double a[10] = { 0,1.0,2,3,4,5,6,7,8,9 };
    	int length = 10;
    	saveDataToTXT(a, length, filePath);
    
    	system("pause");
        return 0;
    }

    保存到bin文件

    #include "stdlib.h"
    #include<stdio.h>
    
    int saveDataToBin(int y[], int length, const char* filePath) {
    	int i = 0, j = 0;										
    	FILE *fpwrite;
    	fpwrite = fopen(filePath, "wb"); //数据导出
    	if (fpwrite == NULL)
    	{
    		printf("cant open the file fpwrite");
    		exit(0);
    	}
    	
    	int nwrite = 0;
    	nwrite = fwrite(y, sizeof(int), length, fpwrite);
    	if (nwrite == 0 && filePath != NULL) {
    		printf("write failed!");
    	}
    	fclose(fpwrite);
    
    	return 0;
    }
    
    int main()
    {
    	const char* filePath = "test.bin";
    	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
    	int length = 10;
    	saveDataToBin(a, length, filePath);
    
    	system("pause");
        return 0;
    }
    

    1.2 c语言读文件

    读txt文件,读bin文件

    #include "stdlib.h"
    #include<stdio.h>
    
    //读bin文件
    void read_bin(const char *path, int *buf, int size)  
    {  
        FILE *infile;  
          
        if((infile=fopen(path,"rb"))==NULL)  
        {  
            printf( "\nCan not open the path: %s \n", path);  
            exit(-1);  
        }  
        fread(buf, sizeof(int), size, infile);
        fclose(infile);  
    } 
    
    //读txt文件
    int readTXT(const char *filePath, int buf[], int length)
    {
    	FILE *fpRead = fopen(filePath, "rb"); //读数据
    	if(fpRead == NULL)
    	{
    		printf("cant open the file fpRead");
    		exit(0);
    	}
    
    	
    	for(int i = 0; i < length; i++)
    	{
    		fscanf(fpRead,"%d ", &buf[i]);	
    		printf("%d\n",buf[i]);		
    	}
    	return 0;
    }
    
    int main()
    {
    	int i=0;
    	const char* filePath = "test.bin";
    	int a[10] = { 1,1,2,3,4,5,6,7,8,9 };
    	int b[10];
    	int length = 10;
    	//saveDataToTXT(a, length, filePath);
    	//readTXT(filePath, b, length);
    
    	saveDataToBin(a, length, filePath);
    	read_bin(filePath, b, 10);
    	for (i = 0; i < 10; i++)
    	{
    		printf("b[%d]=%d\n", i, b[i]);
    	}
    	
    	system("pause");
        return 0;
    }

    2 c++读写文件

    参考:C++ 文件和流 | 菜鸟教程

    程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化,C++中对文件操作需要包含头文件 < fstream >

    文件类型分为两种:

    1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中

    2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

    操作文件的三大类:

    1. ofstream:写操作

    2. ifstream: 读操作

    3. fstream : 读写操作

    2.1 文本文件

    2.1.1 写文件

    写文件步骤如下:

    1. 包含头文件

      #include <fstream>

    2. 创建流对象

      ofstream ofs;

    3. 打开文件

      ofs.open("文件路径",打开方式);

    4. 写数据

      ofs << "写入的数据";

    5. 关闭文件

      ofs.close();

    文件打开方式:

    打开方式解释
    ios::in为读文件而打开文件
    ios::out为写文件而打开文件
    ios::ate初始位置:文件尾
    ios::app追加方式写文件
    ios::trunc如果文件存在先删除,再创建
    ios::binary二进制方式

    注意: 文件打开方式可以配合使用,利用|操作符

    例如:用二进制方式写文件 ios::binary | ios:: out

    #include <fstream>
    
    void test01()
    {
    	ofstream ofs;
    	ofs.open("test.txt", ios::out);
    
    	ofs << "姓名:张三" << endl;
    	ofs << "性别:男" << endl;
    	ofs << "年龄:18" << endl;
    
    	ofs.close();
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }

    2.1.2 读文件

    读文件步骤如下:

    1. 包含头文件

      #include <fstream>

    2. 创建流对象

      ifstream ifs;

    3. 打开文件并判断文件是否打开成功

      ifs.open("文件路径",打开方式);

    4. 读数据

      四种方式读取

    5. 关闭文件

      ifs.close();

    #include <fstream>
    #include <string>
    void test01()
    {
    	ifstream ifs;
    	ifs.open("test.txt", ios::in);
    
    	if (!ifs.is_open())
    	{
    		cout << "文件打开失败" << endl;
    		return;
    	}
    
    	//第一种方式
    	//char buf[1024] = { 0 };
    	//while (ifs >> buf)
    	//{
    	//	cout << buf << endl;
    	//}
    
    	//第二种
    	//char buf[1024] = { 0 };
    	//while (ifs.getline(buf,sizeof(buf)))
    	//{
    	//	cout << buf << endl;
    	//}
    
    	//第三种
    	//string buf;
    	//while (getline(ifs, buf))
    	//{
    	//	cout << buf << endl;
    	//}
    
    	char c;
    	while ((c = ifs.get()) != EOF)
    	{
    		cout << c;
    	}
    	ifs.close();
    
    
    }
    
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }

      

    2.2 二进制文件,bin文件

    以二进制的方式对文件进行读写操作

    打开方式要指定为 ==ios::binary==

    2.2.1 写文件

    二进制方式写文件主要利用流对象调用成员函数write

    函数原型 :ostream& write(const char * buffer,int len);

    参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

    #include <fstream>
    #include <string>
    
    class Person
    {
    public:
    	char m_Name[64];
    	int m_Age;
    };
    
    //二进制文件  写文件
    void test01()
    {
    	//1、包含头文件
    	//2、创建输出流对象
    	ofstream ofs("person.txt", ios::out | ios::binary);
    
    	//3、打开文件
    	//ofs.open("person.txt", ios::out | ios::binary);
    
    	Person p = {"张三"  , 18};
    	//4、写文件
    	ofs.write((const char *)&p, sizeof(p));
    
    	//5、关闭文件
    	ofs.close();
    }
    
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }

    2.2.2 读文件

    二进制方式读文件主要利用流对象调用成员函数read

    函数原型:istream& read(char *buffer,int len);

    参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

    #include <fstream>
    #include <string>
    
    class Person
    {
    public:
    	char m_Name[64];
    	int m_Age;
    };
    
    void test01()
    {
    	ifstream ifs("person.txt", ios::in | ios::binary);
    	if (!ifs.is_open())
    	{
    		cout << "文件打开失败" << endl;
    	}
    
    	Person p;
    	ifs.read((char *)&p, sizeof(p));
    
    	cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
    }
    
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }

    3 MATLAB读写文件

    3.1 MATLAB读文件

    读bin文件

    bin文件存储方式:
       big endian:  大尾端,也称大端(高位)优先存储。
       little endian:小尾端,也称小端(低位)优先存储。
       如下00000000 00000000 00000000 00000001的存储
       大尾端: 00000000 00000000 00000000 00000001
                      addr+0      addr+1      addr+2      addr+3    //先存高有效位(在低地址),即低地址存高位
       小尾端: 00000001 00000000 00000000 00000000
                       addr+0     addr+1      addr+2      addr+3    //先存低有效位(在低地址),即低地址存低位
    fid  = fopen('rx_data.bin');
    
    if fid==-1
        fprintf('file open error!\n');
        return;
    end
    
    //加入bin文件中存放的数据类型是int16
    data = fread(fid, 900, 'int16');//读取900个int16数据,
    //data = fread(fid, 'int16'); //一次性读取
    //data = fread(fid, 'int32', 'ieee-be');//小尾端读

     读txt文件

    data=load('data.txt');

    3.2 MATLAB写文件

    输出到txt文件

    fid = fopen('char.txt','a+'); 
    for i=1:10
        fprintf(fid,'%.2f\n',data(i));
    end
    
    fprintf(fid,'-----------------------------------------------\n'); 
    
    fclose(fid);

    展开全文
  • 我要讲一个txt文件中的一些中文字去掉,只剩下数据,由于数据量很大,手动不显示,故想通过matlab程序来实现,由于对matlab这方面的了解不够,所以来想各位大侠请教!谢谢!现列举一部分的数据如下:Separator ...
  • matlab 读写txt文件

    2014-07-01 15:44:06
    fidout = fopen('listout.txt'); %打开读取文件夹 fidin = fopen('listin.txt','w') ; %打开写入文件夹 while ~feof(fid)  tline=fgetl(fidout); %读取  fprintf(fidin, '%s \n',tline); %写入 ...
  • Matlab读取edf文件的方法

    千次阅读 2019-10-14 10:25:19
    可使用edfread函数读取.edf文件。 function [hdr, record] = edfread(fname, varargin) % Read European Data Format file into MATLAB % % [hdr, record] = edfread(fname) % Reads data from ALL RECORDS of file ...
  • I am trying to read in a .csv file with MATLAB. Here is my code:csvread('out2.csv')This is what out2.csv looks like:03/09/2013 23:55:12,129.32,129.3303/09/2013 23:55:52,129.32,129.3303/09/2013 23:56:0...
  • 读取momo.dat文件路径,再生成一个后缀名为.mat的输出文件 file_in='momo.dat'; [path_str,name_str,ext_str] = fileparts( file_in ) ;%解析文件完整路径  ext_str_out = '.mat' ;  file_out = fullfile( path_...
  • MATLAB命令行调用python,python读取文件参数计算结果存取文件MATLAB读取文件结果 matlab把所有参数输出到一个文件里,然后用system命令调python脚本。python脚本读文件做计算结果再写文件。最后matlab再读文件...
  • 在数据处理的过程中,时间格式数据对于分析数据的时间特性是很有必要的,之前的博客有讲时间格式转换的内容,但在保存时间格式数据和其他类型数据,如double,int等时会出现无法同时保存的情况,用load读取时间格式...
  • http://bbs.feng.com/read-htm-tid-8467093.html(提供了三种主流平台的matlab镜像文件及破解方法) 安装MATLAB R2012B遇到问题(需要继续安装以下一个或多个产品: MATLAB 8.0 (不可用) 您必须选择已至少安装这些)...
  • Matlab读取BMP文件代码示例CUDA物理项目141/241 大卫·摩尔(David Moore)更新于2019年2月4日。 此代码按原样对10,000个粒子运行O(n ^ 2)CUDA模拟。 Galaxy1.txt是一个包含100,000个粒子的星系,并且在kernel.cu...
  • 该函数从不同的GTC运行中读取几个history.out文件,返回包含所有信息的matlab结构。 参数n_history( required )是一个整数,指示要读入的history.out的数目。 参数方法(可选)指示您要选择history.out的方式。 ...
  • Matlab读取显示STL\OBJ文件

    千次阅读 热门讨论 2018-05-06 13:26:46
    最近在做图形学的一些任务,其中有一部分是使用MATLAB读取OBJ、STL、OFF文件。 其实OFF和OBJ很相似,所以这里只给出OBJ的文件和STL文件的读取。 最近抽空整理一下。 说明 我的环境时Macos+matlab r2014b 对于...
  • Questions:(full description of problem is below)Does anyone have a suggestion on how to trick Matlab into skipping a line or several lines of code? (mex / java / rewriting some internal Matlab feature...
  • // 读取.mat文件(例:mat文件名为"B.mat",其中包含"initA"变量) double *initA; MATFile *pmatFile = matOpen("D://B.mat", "r"); mxArray *pMxArray = matGetVariable(pmatFile, "initA"); initA = ...
  • matlab中如何读取TXT数据文件_matlab教程今天需要做个matlab读取txt文件,在网上收集了下,查到了几篇不错的,总结一下,方便大家(包括me)使用:下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现...
  • 如何用代码对处理数据matlab SKLOE OUT FILE READER Developed by Xiaoxian Guo and Zhichao Fang 使用方法 下载 libskloe.py 到本地目录 在site-packages添加一个路径文件,如libskloe.pth,必须以.pth为后缀,写上...
  • python读取mat文件主要是通过scipy.io模块 import scipy.io import numpy as np # python 读取mat文件 signal = scipy.io.loadmat('Python basics/Dat_2.mat') 查看一下signal的类型: 字典 In[7]: type(signal) ...
  • matlab分析xml文件Today we will learn how to read the XML file in Java. We will also learn how to parse an XML file in java to object using DOM parser. 今天,我们将学习如何使用Java读取XML文件。 我们还...
  • 最近opencv工程有需要用到matlab的mat文件,遂研究整理如下: 工程配置: 1.包含目录:matlab安装目录\extern\include\win64 2.库目录:matlab安装目录\extern\lib\win64\microsoft 3.链接器->附加依赖项:...
  • 在八度音阶中,我用单元格和矩阵创建了一个文件>> xmat = [1,2,3;4,5,6;7,8,9];>> xcell = {1,2,3;4,5,6;7,8,9};>> save -hdf5 testmat.h5 xmat xcell在ipython和{}中,我发现这个文件包含2个组^{...
  • matlab 中如何读取文本文件

    千次阅读 2012-12-27 21:15:15
    今天需要做个matlab读取txt文件,在网上收集了下,查到了几篇不错的,总结一下,方便大家使用: 下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以。 ...
  • (1) 读取文件特定行CODE: functiondataout=dataread(filein,fileout,line)fidin=fopen(filein,'r');fidout=fopen(fileout,'w');nline=0;while~feof(fidin)%判断是否为文件末尾tline=fgetl(fidin);%从文件读行nline=...
  • [MATLAB] 读取ASII文件中的复数数据

    千次阅读 2019-06-20 10:57:36
    写了一段MATLAB代码,实现读入复数数据,并保存下来。复数数据没法直接读取,只能先读取string,再转换。 test.data 文件内容如下: -9+8i -18-2i 6-15i 7-12i -4+25i 8-20i % Read complex data file_name = 'test'...
  • matlab中读入shp文件很简单,一个函数shaperead就可以了,但输出为shp文件就稍微麻烦一些了。shp文件实际上就是一个struct,因此得到处理结果后,要先将数据变成struct结构,然后调用shapewrite函数就可以了。clc;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,796
精华内容 1,518
关键字:

matlab读取out文件

matlab 订阅