zoukankan      html  css  js  c++  java
  • 关于matlab向文件写入数据的方法——留着备用

    MATLAB数据采集的时候,往往需要把得到的数据保存下来。

    fid = fopen(文件名,‘打开方式’);

    说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功。打开方式有如下选择: 
    ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。 
    ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。 
    ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。 
    ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。 
    ‘a’:在打开的文件末端添加数据。文件不存在则创建。 
    ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。 
    另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。

    一、如果只是单纯的一个变量,可以像下面这样写。g2ggg是文件命名,txt文件(当然可以改成其他文件格式),这个是matlab自动保存在工作文件下的,baocun是我们要保存的变量。%d代表整数,、 代表每写入一次数据换行。

    fid = fopen('g2ggg.xls','a');
    fprintf(fid,'%d 	 ',baocun); 
    fprintf(fid,'
    ');  % 换行
    fclose(fid);
    

      

    其中:

    fid = fopen('g2ggg.xls','a');
    

      

    这句里面的‘a’代表后续写入。这样每次重新运行程序都不会替换之前保存的数据,还是保存在之前保存过的文件夹里面,接着之前的数据继续保存。

    但是如果这个地方是‘w’,则代表写入,它写一次数据都会覆盖之前的数据,最后你会发现txt文件里面只保存了一个数据。除非你在程序中定义一个矩阵,把这些数据每次存在矩阵里面,到最后一次性保存这个矩阵,这些数据才会全部保存下来,但是切记你这次保存前的那个txt文件夹会被这次这个文件夹替换,除非你这次文件夹命名和上次不同。

    二、如果是保存矩阵,可像下面这样写。save_data是文件命名,txt文件,这个是matlab自动保存在工作文件下的,baocun是我们要保存的矩阵。%d代表整数,、 代表每写入一次数据换行。

    fid = fopen('save_data.txt','a');
    [r,c]=size(baocun);
    for i=1:r
    for j=1:c
    fprintf(fid,'%5f	',baocun(i,j));
    end
    fprintf(fid,'
    ');
    end
    fclose(fid);   
    

      

    其中 :

    fid = fopen('save_data.txt','a');

    这句里面的‘a’代表后续写入。这样每次重新运行程序都不会替换之前保存的数据,还是保存在之前保存过的文件夹里面,接着之前的数据继续保存。

    但是如果这个地方是‘w’,则代表写入,它每写一次数据都会覆盖之前的数据,最后你会发现txt文件里面只保存了一个数据。除非你在程序中定义一个矩阵,把这些矩阵每次存在定义的这个矩阵里面,到最后一次性保存这个矩阵,这些数据才会全部保存下来,但是切记你这次保存前的那个txt文件夹会被这次这个文件夹替换,除非你这次文件夹命名和上次不同。

    三、前面两种情况都是matlab自动保存的工作路径下的,如果我们需要matlab自动保存在指定路径下怎么办呢?可以像下面这样写:

    fid = fopen('C:UsersDesktopg2ggg.txt','a');  
    fprintf(fid,'%d,%d,%d 
     ',baocun);

    其中

    C:UsersDesktop
    代表保存路径,这里保存在电脑桌面。
     
    四、如果需要手动输入保存路径,可以像这样写:
    [FileName,PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.xls','Excel(*.xls)';'*.*','All Files(*.*)'},'choose a File');  %% pathname获取保存数据路径, filename获取保存数据名称
    if ~FileName
    return;
    else
    str= [PathName,FileName];
    fid = fopen(char(str), 'w');   % 要想存的文件名是自己输入的,这个地方就得这样写
    fwrite(fid, '', 'integer*4');
    [r,c]=size(baocun);            % 得到矩阵的行数和列数
     for i=1:r
      for j=1:c
      fprintf(fid,'%d	',baocun(i,j));
      end
      fprintf(fid,'
    ');
     end
    fclose(fid);
    一般这样都是采集完成后由手工保存的,在这里保存的是矩阵,因为矩阵里面记录了之前每次的数据,所以采集完成后,一次性保存矩阵就可以保存所有数据了,一般这段代码在GUI里面添加按钮的回调函数里面。每次按下按钮就会弹出窗口让输入文件名以及选择保存路径。
    这里增加了这段代码,又修改了一小部分代码,认真看就知道了。
    [FileName,PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.xls','Excel(*.xls)';'*.*','All Files(*.*)'},'choose a File');  %% pathname获取保存数据路径, filename获取保存数据名称
    if ~FileName
    return;
    else
    str= [PathName,FileName];
    fid = fopen(char(str), 'w');   
    五、如果有需要保存字符串数组的话:
    baocun={'R','G','B','Xdata'};  
     
    这个是包含字符串的数组baocun,
    1 fid = fopen('save_data.txt','a');
    2  fwrite(fid, '', 'integer*4');
    3  for n=1:4
    4  fprintf(fid,'%s	',char(baocun{n}));    %   	表示空格
    5  end
    6  fprintf(fid,'
    ');   %换行
    7  fclose(fid);

    很多东西都是举一反三,多动脑,多尝试,实在没办法就上网找答案,一般都能找到。

     
  • 相关阅读:
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-17 MyBatis 数据库逆向生成工具
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-16 数据源连接数详解
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-14 数据层HikariCP与MyBatis整合
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-13 HikariCP数据源简述
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-12 SpringBoot自动装配简述
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-10 聚合工程整合SpringBoot
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-9 数据库物理外键移除原因讲解
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-8 生产环境增量与全量脚本迭代讲解
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-7 PDMan数据库建模工具使用
    阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-6 构建聚合工程-2
  • 原文地址:https://www.cnblogs.com/6-6-8-8/p/9497044.html
Copyright © 2011-2022 走看看