精华内容
下载资源
问答
  • MATLAB文本文件读写

    2014-06-24 20:52:48
     将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;...

    一. 基本知识:
    1. 二进制文件与文本文件的区别:
        将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。
        从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:
        ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:   
       ASCII码: 00110101   00110110   00110111   00111000   
                      ↓        ↓      ↓         ↓
      十进制码:       5     6         7       8   

    共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。
        二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:00010110   00101110 只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。  

    2. 文本模式(textmode)和二进制模式(binarymode)有什么区别?   

        流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“\n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"\r\n"序列转成"\n",在写入时把"\n"转成"\r\n" )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。

    注:  

          \n一般会操作系统被翻译成"行的结束",即LF(Line-Feed)
          \r会被翻译成"回车",即CR(Cariage-Return)
          对于文本文件的新行,在UNIX上,一般用\n(LF)来表示,Mac上用\r(CR)来表示,
          Windows上是用\n\r(CR-LF)来表示。        

            
        通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。如果用文本方式打开二进制文件,会把“0D   0A”自动变换成“\n”来存在内存中。写入的时候反向处理。而二进制方式打开的话,就不会有这个过程。但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写。

       简言之,对用户来说:在 matlab 中存储成为二进制还是文本文件取决于fopen的方式,如果用wt,则存储为文本文件,这样用记事本打开就可以正常显示了;如果用w则存储为二进制文件,这样用记事本打开会出现小黑方块,要正常显示的话,可以用写字板或UltraEdit等工具打开。

    二. Matlab的I/O文件操作使用技巧和总结:


    1. Matlab 支持的I/O文件(对应“取/存”操作)类型:(所有文件I/O程序不需要特殊的工具箱
    http://www.mathworks.com/support/tech-notes/1100/1102.html

    (注:从上表可以看到,matlab不支持doc格式的文档存取(因为doc文档包含很多格式控制符),请改用txt或者dat格式)

    2. Matlab 的I/O文件指南:
    http://www.mathworks.com/support/tech-notes/1600/1602.html


    以下是部分对应的中文译文:
    本技术支持指南主要处理:ASCII, binary, and MAT files.
    要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令:
    help iofun

    MATLAB中有两种文件I/O程序:high level and low level.
    High level routines: 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程
    Low level routines: 可以更加灵活的完成相对特殊的任务,需要较多的额外编程。

     

    High level routines 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。

    举个例子,如果你有一个包含数值和字母的文本文件(text file)想导入MATLAB,你可以调用一些low level routines自己写一个函数,或者是简单的用TEXTREAD函数。


    使用high level routines的关键是:文件必须是相似的(homogeneous),换句话说,文件必须有一致的格式。下面的段落描述一些high level file I/O routines并给出一些例子帮助理解概念。


    LOAD/SAVE


    主要的high level file I/O routines 是LOAD SAVE函数。LOAD
    可以读MAT-file data或者用空格间隔的格式相似的ASCII data. SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file
    sample_file.txt


    1 5 4 16 8

    5 43 2 6 8

    6 8 4 32 1

    90 7 8 7 6

    5 9 81 2 3


    Example:
    用 LOAD and SAVE 读写数据


    CODE:
    % Load the file to the matrix, M :
    M = load('sample_file.txt')

    % Add 5 to M :
    M = M +5

    % Save M to a .mat file called 'sample_file_plus5.mat':
    save sample_file_plus5 M

    % Save M to an ASCII .txt file called 'sample_file_plus5.txt' :
    save sample_file_plus5.txt M -ascii

    UIGETFILE/UIPUTFILE


    UIGETFILE/UIPUTFILE是基于图形用户界面GUI)的。会弹出对话框,列出当前目录的文件和目录,提示你选择一个文件。UIGETFILE让你选择一个文件来写(类似Windows ‘另存为’选项?)。用UIGETFILE,可以选择已存在的文件改写,也可以输入新的文件名。两个函数的返回值是所选文件名和路径。


    Example:
    用 UIGETFILE 从当前目录选择一个 M-file

    CODE:
    % This command lists all the M-files in the current directory and
    % returns the name and path of the selected file

    [fname,pname] = uigetfile('*.m','Sample Dialog Box')

    注意: UIGETFILE 一次只能选择一个文件。


    UIIMPORT/IMPORTDATA


    UIIMPORT是一个功能强大,易于使用的基于GUI的high level routine,用于读complex data files。文件也必须是homogeneous。

    IMPORTDATA形成UIIMPORT的功能,不打开GUI。可以将IMPORTDATA用于函数或者脚本中,因为在函数或者脚本中基于GUI的文件导入机制并不理想。下面的例子用到包含几行文件头和文本、数值数据的文件'sample_file2.txt'


    This is a file header.

    This is file is an example.

    col1 col2 col3 col4

    A    1   4    612.000

    B    1   4    613.000

    C    1   4    614.000

    D    1   4    615.000


    Example: Using IMPORTDATA to read in a file with headers, text, and numeric data


    CODE:
    % This reads in the file 'sample_file2.txt' and creates a
    % structure D that contains both data and text data.
    % Note the IMPORTDATA command specifies a white space
    % as the delimiter of the file, but IMPORTDATA can usually
    % detect this on its own
    D = importdata('sample_file2.txt')

     

    可以通过访问结构D的数据和文本域,来看结构D中的真实值,例如输入:

    data = D.data

    text = D.textdata


    可以用UIIMPORT读同一个文件并得到同样的结构.

    注意: 对于 ASCII data, 你必须检验导入向导正确的识别了列分隔符。


    TEXTREAD/STRREAD


    TEXTREAD 是一个强大的动态high level routine,设计用来读ASCII格式的文本和/或数值数据文件。STRREAD除是从字符串而不是文件读以外,类似于TEXTREAD


    两个函数可以用许多参数来改变其具体的工作方式,他们返回读入指定输出的数据。他们有效的提供给你一个
    “两全其美”的方法,因为他们可以用一个命令读入混合的ASCII和数值数据(high level routines的做法),并且你可以改变他们以匹配你特定的应用(如同low level routines做到的)。例子:


    CODE:
    Example 1: Using TEXTREAD to read in an entire file into a cell array
    % This command reads in the file fft.m into the cell array, file
    file = textread('fft.m','%s','delimiter','\n','whitespace','');


    CODE:
    Example 2: Using STRREAD to read the words in a line
    % This command uses the cell array created in Example 1 to
    % read in each word of line 28 in 'file' to a cell array, words
    words = strread(file{28},'%s','delimiter','')


    CODE:
    Example 3: Using TEXTREAD to read in text and numeric data from a file with headers
    % This command skips the 2 header lines at the top of the file
    % and reads in each column to the 4 specified outputs
    [c1 c2 c3 c4] = textread('sample_file2.txt','%s %s %s %s','headerlines',2)

    CODE:
    Example 4: Using TEXTREAD to read in specific rows of text and numeric data from a file
    % This command reads in rows B and C of the file. The 'headerlines'
    % property is used to move down to the desired starting row and the
    % read operation is performed 2 times

    [c1 c2 c3 c4] = textread('sample_file2.txt',...
    '%s %s %s %s',2,'headerlines',4)

    CODE:
    Example 5: Using TEXTREAD to read in only the numeric data from a file containing text and numbers
    % This command reads in only the numeric data in the file. The
    % 'headerlines' property is used to move down to the first row
    % of interest and the first column of text is ignored with the
    % '*'  operator
    [c2 c3 c4] = textread('sample_file2.txt','%*s %d %d %f','headerlines',3)

    DLMREAD/DLMWRITE/CSVREAD


    DLMREAD DLMWRITE函数能够读写分隔的ASCII data,而不是用low level routines。他们比low level routines容易使用,Low level routines用几行代码实现的功能可以用DLMREAD/DLMWRITE简化成一行。

    CSVREAD用来读分隔符是逗号的文件,是DLMREAD的特殊情况。当读空格和Tab分隔的电子数据表文件时,DLMREAD特别有用。以'sample_file.txt'为例:


    CODE:
    Example 1: Using DLMREAD to read in a file with headers, text, and numeric data
    % This reads in the file 'sample_file2.txt' and creates a matrix, D,
    % with the numeric data this command specifies a white space as the
    % delimiter of the file

    D = dlmread('sample_file.txt','')

    CODE:
    Example 2: Using DLMREAD to extract the first 3 columns of the last 3 rows
    % This reads in the first 3 columns of the last 3 rows of
    % the data file 'sample_file.txt'into the matrix, D_partial.
    % 读文件 'sample_file.txt' 前3列后3行,到矩阵D_partial.
    D_partial = dlmread('sample_file.txt','',[2 0 4 2])

    CODE:
    Example 3: Using DLMWRITE to write a comma delimited file
    % This creates a file called 'partialD.txt' that consists of
    % the first 3 columns of the last 3 rows of data where each
    % element is separated by a comma
    dlmwrite('partialD.txt',D_partial,',')

    注意: 保证DLMREAD and DLMWRITE指定范围的指标从0开始,而不是从1开始。


    WK1READ/WK1WRITE

    WK1READ 用来读Lotus123 电子数据表文件的数据;WK1WRITE用来写矩阵到Lotus123 电子数据表文件。

    XLSREAD

    XLSREAD用来读Excel的数值和文本数据。


    三. 具体例子分析:
    Matlab网站用两个例子非常详尽地介绍了各个命令的基本用法,实际中,面对手头上的数据,如何选用合适的命令呢?以下结合几个示例给出一些总结,大家举一反三就可以了:

    1. 纯数据(列数相同):
    源文件:
    CODE:

    0 3866.162 2198.938 141.140
    1 3741.139 2208.475 141.252
    2 3866.200 2198.936 141.156
    3 3678.048 2199.191 141.230
    4 3685.453 2213.726 141.261
    5 3728.769 2212.433 141.277
    6 3738.785 2214.381 141.256
    7 3728.759 2214.261 141.228
    8 3748.886 2214.299 141.243
    9 3748.935 2212.417 141.253
    10 3733.612 2226.653 141.236
    11 3733.583 2229.248 141.223
    12 3729.229 2229.118 141.186

    解答:对于这个txt文件,由于各行列数相同,故简单地使用load,importdata均可。

    2.字段名(中、英文字段均可)+数据:
    源文件:

    CODE:
    CH0 CH1 CH2 CH3
    0.000123 0.000325 0.000378 0.000598
    0.000986 0.000256 0.000245 0.000698

    解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行在文件中补上 Inf 或 NaN),故直接使用 importdata 便可。

    3.注释(含有独立的数字串)+数据(列数相同):
    问题:这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件
    源文件:

    CODE:
    Group 2  12.02.2006   Limei
    Samples of datas: 50000

    CH0  CH1  CH2  CH3
    0.000123  0.000325   0.000378   0.000598
    0.000986  0.000256   0.000245   0.000698

    目标文件:

    CODE:
    Group 2 12.02.2006 Limei
    Samples of datas: 50000

    CH0 CH1
    0.000123 0.000325
    0.000986 0.000256


    解答:由于注释中含有独立的数字串,且注释部分没有明显的格式,这时候用importdata, load等高级命令直接读取会失败,用 textread, dlmwrite 等格式化命令也不太合适,因此只能使用低级命令进行读取。(当然了,可以跳过注释部分直接用高级命令读取数据,即:[a b c d] = textread(filename,'%f %f %f %f','headerlines',4); )。一个简单的、非通用的包含注释的读取方法如下:

    CODE:
    clc;clear;
    fid = fopen('exp.txt', 'r');
    fid_n=fopen('ex.dat','w');
    while ~feof(fid)
        tline=fgetl(fid);
        if ~isempty(tline)
            if double(tline(1))>=48 && double(tline(1))<=57  %数值开始
                a=strread(tline);
                a(3:4)=[];
                fprintf(fid_n,'%f %f\n',a);
                clear a;
            elseif double(tline(1))==67   %字母C开始
               [b1,b2,b3,b4]=strread(tline,'%s %s %s %s');
               b=[b1{1},'  ',b2{1}];
                fprintf(fid_n,'%s\n',b);
                clear b b1 b2 b3 b4;
            else
                fprintf(fid_n,'%s\n',tline);
            end
        else
            fprintf(fid_n,'%s\n',tline);
        end
    end
    fclose(fid);
    fclose(fid_n);

    4. 注释(不含独立的数字串)+数据(列数相同):
    源文件:

    CODE:
    你好 abc
    欢迎来到 新浪博客
    blog.sina.com.cn
    1 11 111 1111
    2 22 222 2222
    3 33 333 3333
    4 44 444 4444
    5 55 555 5555

    解答:直接用 importdata 便可
    注:有时候注释中含有独立的数字串也可以 importdata 成功,不过得到的结果有可能不正确,建议这时候使用第3种情形的读取方式。

    5. 注释与数据混排:
    对此当然只能自己编程,举例:
    源文件

    CODE:
    1 11 111 1111
    你好
    2 22 222 2222
    欢迎来到
    3 33 333 3333
    新浪博客
    4 44 444 4444
    blog.sina.com.cn
    5 55 555 5555


    解答:

    CODE:
    function [data]=distilldata(infile)
    %功能说明:
    %将保存数据的原始文件中的数值数据读入到一个data变量中
    %使用说明:
    % infile——原始数据文件名;
    % data=数据变量

    tmpfile='tmp2.mat';
    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)
    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)
    while ~feof(fidin) % 判断是否为文件末尾
      tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)
      if ~isempty(tline) % 判断是否空行
        [m,n]=size(tline);
        flag=1;
        for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外)
          if ~(tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...
              |tline(i)=='e'|tline(i)=='+'...
              |(double(tline(i))>=48&&double(tline(i))<=57))
            flag=0;
            break;
          end
        end
        if flag==1 % 如果是数字行,把此行数据写入文件
          fprintf(fidtmp,'%s\n',tline);
        end
      end
    end

    fclose(fidin);
    fclose(fidtmp);
    data=textread(tmpfile);
    delete(tmpfile);

    另外,如果要求不高,也可以使用 textread 函数跳过注释部分进行读取,不过前提是需要事先知道文件内容的结构(即哪行是数据、哪行是注释)

    6.各列数据的分离:
    源文件:

    CODE:
               0 +  47038.7   1.05  09:26:07  C
               2 +  46477.7   1.03  09:28:38  C  
               4 +  44865.7   1.04  09:28:48  C  
               6 +  41786.4   1.03  09:28:56  C  
               8 +  39896.0   0.97  09:29:03  C  
              10 +  37518.4   0.93  09:29:15  C  
              12 +  35858.5   0.92  09:29:30  C  
              14 +  46105.0   1.03  09:30:21  C  

    展开全文
  • MATLAB 文件读写数据读取文件路径% 打开文件夹>> files = dir('Videos');% 获取文件名>> files(1).name文本数据读取这一步的前提是上一步进入到当前文件路径里读取数值文本⚠️在txt文本中%后的文字会被...

    MATLAB 文件读写

    数据读取

    文件路径

    % 打开文件夹

    >> files = dir('Videos');

    % 获取文件名

    >> files(1).name

    文本数据读取

    这一步的前提是上一步进入到当前文件路径里

    读取数值文本

    ⚠️在txt文本中%后的文字会被自动识别为注释。

    下面有这样一个txt文件:

    a688361a26bba541f5331d66d6e4eb14.png

    % 读取文本数据

    >> data = load('score.txt');

    % 得到第1列的数据

    >> w = data(:,1);

    % 得到第2列和第3列的数据

    >> s = data(:,2:3);

    % 计算各自的得分

    >> r = w'*s %注意转置后相乘,矩阵相乘的条件

    r =

    88.29 87.19

    读取字符串文本

    下面有这样一个txt文件:

    10f2bc2950d0c43018b76b79bee3684f.png

    % r表示只读的意思

    >> fid = fopen('swords.txt','r');

    % 这里的l表示行的意思

    >> t1 = fgetl(fid)

    t1 =

    刘正风

    >> t2 = fgetl(fid)

    t2 =

    包惜弱

    % 读全部用while循环即可

    % 将字符组合起来

    >> t = [t1(1) t2(3)]

    t =

    刘弱

    % 注意读完要close

    >> fclose(fid);

    举个例子

    下面有这样一个文本:

    8aefe550a607a9d70aee154a1c36461f.png

    filename = 'beltway.dat';

    fid = fopen(filename,'r'); % 读取文件

    tline = fgetl(fid); tline = fgetl(fid); % 读取第一行 第二行

    % 一直无限按行读取下去

    while ischar(tline)

    data = regexp(tline,',','split'); % 按','分割开字符串

    [date,lat,long] = data{:}; % 分别赋值给数组date,lat,long

    time = datenum(date,'dd/mm/yyyy'); % 计算时间day,内置函数

    lat = str2num(lat); long = str2num(long); % str2num:字符串转换成数字;同理num2str:数字转字符串

    tline = fgetl(fid); % 读取下一行

    end

    fclose(fid); % 关闭文件

    写文本数据

    新建一个文本在当前目录下bill.txt

    % 打开文本,若没有会新建

    >> fid = fopen('bill.txt','w');

    % 参数1 文件名,参数2写入的数据

    >> fprintf(fid,'我的账单\n\n');

    % 参数1 文件名,参数2 数据,参数3 像c语言填写%d

    >> fprintf(fid,'手机 %d \n',-1200);

    >> fprintf(fid,'账目细节\n');

    >> detail = -[845 834.2 345 390 893.22];

    % %-5d表示往右空5个空格,没有-号表示左边5个空格。.1f表示精度为小数点后1位

    >> fprintf(fid,'%-5d %5.1f\n',[1:5;detail]);

    输出结果如下:

    41733701e22755f14907c2b801298b53.png

    Excel文本数据读取

    有如下这样一个Excel文件

    da82ebac5f9c65ae3ce3b9a616d770ca.png

    % 注意参数2为表单

    >> data = xlsread('data.xls','Sheet1','A4:C6')

    data =

    95 12 33

    45 667 775

    123 43577 2343

    % isnan() 即是判断是否为NaN。

    % data('逻辑运算')得到的结果就是如果是就赋值为0,不是就取出来

    >> data(isnan(data)) = 0

    data =

    0 88 33

    0 11 33

    0 22 33

    95 12 33

    45 667 775

    123 43577 2343

    Excel文件的写

    >> xlswrite('RS.xls',{'T','W'},'Sheet1','B1:C1');

    % 写入一个元胞数组

    >> XYZ = {'X','Y','Z';6 6 8; 9 7 5};

    >> xlswrite('RS.csv',XYZ','A2:G4');

    图片数据读入

    % 读图片

    Yui = imread('Yui.jpg');

    % 显示尺寸,得到的是像素点数,最后一个为层数,3层即RGB

    size(Yui)

    ans =

    374 374 3

    % 显示图片

    image(Yui)

    % 取出一部分,参数为像素范围

    lip = Yui(242:266,255:279,:);

    image(lip);

    视频数据读入

    obj = VideoReader('Videos/AoiSora.avi');

    % 获取第几帧

    frame = read(obj,25);

    % 显示出来

    imshow(frame);

    展开全文
  • Matlab读写文本数据

    千次阅读 2018-10-12 08:55:17
    matlab文件读取总结 matlab的文件读取函数功能可以读取各种文件类型,包括: textread(字母和数值每行格式一致) xlsread(读取excel文件) importdata(字母和数值分开,以数字为主,字母只存在前几行) load(纯数据)...

    matlab文件读取总结

    matlab的文件读取函数功能可以读取各种文件类型,包括:

    textread(字母和数值每行格式一致) 
    xlsread(读取excel文件) 
    importdata(字母和数值分开,以数字为主,字母只存在前几行) 
    load(纯数据) 
    dlmread(单一分隔符的纯数据或ASCII数据文件) 
    textscan(类似于textread,但使用前必须fopen打开文件) 
    csvread(类似于xlsread,读取.csv格式的文件) 
    
    

    textread读取

    %-- read
    fid=fopen('sbdart_aeronet_w.out','r');
    aerosol_w = textscan(fid, '%f', 'HeaderLines',1); % 跳过第一行
    fclose(fid);
    %-- 因为不是成行读取,所以读取后的数据需要重新调整为矩阵
    aerosol_w = cell2mat(aerosol_w);
    aerosol_w = reshape(aerosol_w, 9, [])';  %原始数据是M行*9

    fscan读取

    fileID = fopen('I:\filelist_2019-01-01-2019-12-31_filenames.txt');
    files = textscan(fileID,'%s');
    fclose(fileID);
    

    逐行读取字符串文本

    fid = fopen(filename);
    while ~feof(fid)
       str = fgetl(fid);
    end
    fclose(fid);
    
    

    逐行写入字符串文本

    fid = fopen('D:\test','wt');
    for j = 1:size(data,1)
        fprintf(fid,'%s\n',data{j});
    end
    fclose(fid);
    

    Matlab文件写文本

    写csv文件

    例子1和2通过table数据结构,并写入csv。关于表的具体使用可以看官网
    通过table数据结构,可以设置表头(每一列名)以及每一行名,当然也可以不设置。
    用法:

    T = table(var1,...,varN)
    T = table('Size',sz,'VariableTypes',varTypes)
    T = table(___,'VariableNames',varNames)
    T = table(___,'RowNames',rowNames)
    T = table
    

    例子1——writetable

    data = magic(5);
    result_table = table(data);
    %保存表格
    writetable(result_table, 'test.csv');
    

    例子2——writetable

    %需要保存的矩阵
    data = magic(5);
    T = table(data(:,1),data(:,2),data(:,3),'VariableNames',{'Value1','Value2','Value3'});
    writetable(T, 'test.csv');
    

    例子3——dlmwrite

    %需要保存的矩阵
    data = magic(5);
    % write header to file
    fid = fopen('test.csv','w'); 
    fprintf(fid,'%s\n',['Value1,Value2,Value3,Value4,Value5'])
    fclose(fid)
    % write data to end of file
    dlmwrite('test.csv',data,'-append');
    

    备注:如果制定每列标题的话,例子3可能更方便一些

    例子4——csvwrite
    这里如果要写入每一列的表头,仍然需要像列子3一样处理

    csvwrite(filename,M) 将矩阵 M 以逗号分隔值形式写入文件 filename。
    csvwrite(filename,M,row,col) 从指定的行和列偏移量开始将矩阵 M 写入文件 filename。行和列参数从 0 开始,因此 row=0 和 col=0 指定文件中的第一个值。
    

    例子5——printf

    % Create a csv file
    fid=fopen('test2.csv','a');
    BD1=1:size(data,1);% size(x,1)表示行数,size(x,2)表示列数
    if fid<0
    	errordlg('File creation failed','Error');
    end
    
    % 注意fprintf不支持元胞数组
    title={'NO','obj1','obj2'};
    % fprintf(fid,'%s,%s,%s\n',title(1),title(2),title(3)); % 这样写会保错
    fprintf(fid,'%s,%s,%s\n',cell2mat(title(1)),cell2mat(title(2)),cell2mat(title(3)));
    % 一共有51for i=1:size(data,1)
    	fprintf(fid,'%d,%d,%d\n',BD1(i),data(i,1),data(i,2));
    end
    fclose(fid);
    

    例子6——writematrix

    data = magic(5);
    writematrix(data,'test.csv')
    

    参考
    https://www.cnblogs.com/cloud-ken/p/12701082.html
    https://ww2.mathworks.cn/help/matlab/ref/writematrix.html#namevaluepairarguments
    https://ww2.mathworks.cn/help/matlab/ref/csvwrite.html

    展开全文
  • MATLAB 文件读写

    2019-03-08 22:30:52
    MATLAB 文件读写 数据读取 文件路径 % 打开文件夹 &gt;&gt; files = dir('Videos'); % 获取文件名 &gt;&gt; files(1).name 文本数据读取 这一步的前提是上一步进入到当前文件路径里 读取数值...

    MATLAB 文件读写

    数据读取

    文件路径

    % 打开文件夹
    >> files = dir('Videos');
    % 获取文件名
    >> files(1).name 
    

    文本数据读取

    这一步的前提是上一步进入到当前文件路径里

    • 读取数值文本
      ⚠️在txt文本中%后的文字会被自动识别为注释。
      下面有这样一个txt文件:

    7C84CF20-4D92-44A5-83E9-C4F497FEA478.png

    % 读取文本数据
    >> data = load('score.txt'); 
    % 得到第1列的数据
    >> w = data(:,1);
    % 得到第2列和第3列的数据
    >> s = data(:,2:3);
    % 计算各自的得分
    >> r = w'*s %注意转置后相乘,矩阵相乘的条件
    r =
        88.29   87.19
    
    • 读取字符串文本
      下面有这样一个txt文件:

    BEA3C608-F710-40D2-9846-6FC871BD1475.png

    % r表示只读的意思
    >> fid = fopen('swords.txt','r'); 
    % 这里的l表示行的意思
    >> t1 = fgetl(fid)
    t1 = 
          刘正风
    >> t2 = fgetl(fid)
    t2 =
         包惜弱
    % 读全部用while循环即可
    
    % 将字符组合起来
    >> t = [t1(1) t2(3)]
    t = 
        刘弱
    
    % 注意读完要close
    >> fclose(fid);
    
    • 举个例子
      下面有这样一个文本:

    56C23204-E51A-46CD-87AD-6484B5098CB6.png

    filename = 'beltway.dat';
    fid = fopen(filename,'r'); % 读取文件
    tline = fgetl(fid); tline = fgetl(fid); % 读取第一行 第二行
    % 一直无限按行读取下去
    while ischar(tline) 
        data = regexp(tline,',','split'); % 按','分割开字符串
        [date,lat,long] = data{:}; % 分别赋值给数组date,lat,long
        time = datenum(date,'dd/mm/yyyy');  % 计算时间day,内置函数
        lat = str2num(lat); long = str2num(long); % str2num:字符串转换成数字;同理num2str:数字转字符串
        tline = fgetl(fid); % 读取下一行
    end
    fclose(fid); % 关闭文件
    

    写文本数据

    新建一个文本在当前目录下bill.txt

    % 打开文本,若没有会新建
    >> fid = fopen('bill.txt','w');
    % 参数1 文件名,参数2写入的数据
    >> fprintf(fid,'我的账单\n\n');
    % 参数1 文件名,参数2 数据,参数3 像c语言填写%d
    >> fprintf(fid,'手机 %d \n',-1200);
    >> fprintf(fid,'账目细节\n');
    >> detail = -[845 834.2 345 390 893.22];
    % %-5d表示往右空5个空格,没有-号表示左边5个空格。.1f表示精度为小数点后1位
    >> fprintf(fid,'%-5d %5.1f\n',[1:5;detail]);
    

    输出结果如下:
    D2A6AFD5-3D9A-44B9-9503-57A58D8C3ADF.png

    Excel文本数据读取

    有如下这样一个Excel文件
    74B0BB4D-CDFD-4FBE-95D7-693E5CCB480A.png

    % 注意参数2为表单
    >> data = xlsread('data.xls','Sheet1','A4:C6')
    data =
              95          12          33
              45         667         775
             123       43577        2343
    
    % isnan() 即是判断是否为NaN。 
    % data('逻辑运算')得到的结果就是如果是就赋值为0,不是就取出来
    >> data(isnan(data)) = 0
    data =
               0          88          33
               0          11          33
               0          22          33
              95          12          33
              45         667         775
             123       43577        2343
    

    Excel文件的写

    >> xlswrite('RS.xls',{'T','W'},'Sheet1','B1:C1');
    % 写入一个元胞数组
    >> XYZ = {'X','Y','Z';6 6 8; 9 7 5};
    >> xlswrite('RS.csv',XYZ','A2:G4');
    

    图片数据读入

    % 读图片
    Yui = imread('Yui.jpg');
    % 显示尺寸,得到的是像素点数,最后一个为层数,3层即RGB
    size(Yui)
    ans = 
         374 374 3
    % 显示图片
    image(Yui)
    % 取出一部分,参数为像素范围
    lip = Yui(242:266,255:279,:);
    image(lip);
    

    视频数据读入

    obj = VideoReader('Videos/AoiSora.avi');
    % 获取第几帧
    frame = read(obj,25);
    % 显示出来
    imshow(frame);
    
    展开全文
  • matlab文本文件的读写

    千次阅读 2019-08-13 15:21:46
    介绍Matlab读写文本文件的方法,包括load、dlmread、csvread、importdata、textscan、dlmwrite、csvwrite、save等函数的用法。 读文件 1. 纯数字 load test.txt % 导入文本数据,并保存在 test 变量; ...
  • 一.matlab读取文件函数总结1. load读取方式a.基本说明:html只能读取数值数据,不能读取含文本的数据;日期按数值读取。webb.调用方式:数组a=load(filename);appc. 有无分隔符限制:svg无需输入分隔符,可自动...
  • Matlab读写矩阵到文本文件

    千次阅读 2017-08-18 14:22:22
    问题描述:使用matlab,如何将数据一次从文本文件读出?如何将矩阵数据一次性写入文本文件?  批量读出文本中的数据常用的函数是importdata(),可以分别导入数据中的字符和数值数据,并可以跳过指定行等,import...
  • Matlab数据读写

    2017-02-23 09:15:07
    %将工作空间中的数据矩阵a、b、c保存到数据文件data1.mat中: save data1 a b c%把纯文本文件data2.txt加载到工作空间: a = load('data2.txt');%把矩阵a保存到纯文本文件data3.txt中: dlmwrite('data3.txt', a);
  • 存储数字:dlmwrite('myFile.csv',M,'delimiter',',')读取文本文件:[cellA, cellB] = textread('1.csv', '%s%s', 'delimiter', ',');for index = 1:length(cellA)if ismember(cellA(index), str1)%do...
  • 这就涉及到MATLAB文本文件的读取和存入操作。这里我们以一个例子来说明对文本文件读、存的操作。 图1 光谱文件结构 一般光谱仪得到的光谱文件结构如图1所示,共包含两列,第一列为波长数值(单位:nm),第二列为...
  • Matlab 文件读写函数

    千次阅读 2012-08-23 07:59:50
    Matlab提供多种能够进行文件读写的函数,这些函数是Matlab语言的一部分,并不需要任何额外的工具箱的支持。 文本文件 Matlab中对文件的读写函数可以分为2大类:高级函数和低级函数。简单的说,高级函数的调用...
  • Matlab文件读写函数

    千次阅读 2012-11-29 21:15:32
    Matlab提供多种能够进行文件读写的函数,这些函数是Matlab语言的一部分,并不需要任何额外的工具箱的支持。 文本文件 Matlab中对文件的读写函数可以分为2大类:高级函数和低级函数。简单的说,高级函数的调用...
  • Data表示待写入的数据、文本;sheet表示写入excel中的工作表标签,该参数缺省时,默认为Sheet1;Range表示工作表中的指定区域,该参数缺省时,默认为A1。 clc;clear all; filename = 'study.xlsx'; Data1 = [1,2,3;...
  • matlab 读写txt文本文件的方法

    千次阅读 2011-02-20 16:48:00
    matlab示例语句: [filename, date, timestamp, direction, dayornight, weather, startframe, numframes, class] = textread('info.txt', ... '%s %s %s %s %s %s %s %s %s', -1);   ...
  • 目录 ...5-二进制数据的读写 6-使用文件I/O函数 7-MAT文件 1-文件打开与关闭  fopen('filename','mode')  fclose(f)和fclose all 2-使用函数读取文本数据 表2-2 读取函数的比较 函 数 |数...
  • 本文简单介绍处理文本文件的第一步——导入文本文件到Matlab。 文章目录1 文本文件2 读取文本文件2.1 fscanf2.2 fileread3 写入文本文件4 总结 1 文本文件 会用电脑的人对文本文件都不陌生。能通过记事本或者Notepad...
  • 目录文本文件的读写fscanf函数和fprintf函数fmt由%加上格式符组成 文本文件的读写 fscanf函数和fprintf函数 fscanf函数用于读取文本文件的内容,fprintf函数用于将数据写入文本文件中。调用格式为: [A,count]=...
  • 最近几周的主题是,有了数据,那我们怎么读写数据文件呢?气象中的特殊资料又有哪些处理方法呢?以txt和nc文件做引子,欢迎各位拍砖~No.1基础通用知识读写文件时有一些由c语言衍生出来的读取数据的相关知识,它们...
  • MATLAB传递数据给其他第三方软件或传递给另一个MATLAB的方式有很多种,最简单的方式即利用读写文本实现。本文介绍一种基于读写文本文件的MATLAB与其他应用程序之间消息传递方法。利用该方法,可以为MATLAB的运算信息...
  • Matlab有着强大的数据处理功能,经常... 你可以将txt的一些文本数据直接拷贝到matlab窗口,然后保存为mat文件,下次就可以直接采用load函数了。 (1)Load load 从Matlab的数据文件.mat中读取变量数据,也可以

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
关键字:

matlab文本读写

matlab 订阅