zoukankan      html  css  js  c++  java
  • matlab学习笔记5--低级文件输入输出函数

    一起来学matlab-matlab学习笔记5

    低级文件输入输出函数

    觉得有用的话,欢迎一起讨论相互学习~Follow Me

    参考书籍
    《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷

    MATLABt提供了一组低级文件I/O函数,这些函数都是基于ANSI标准C库的I/O.
    MATLAB文件I/O函数使用与C语言子程序一样的设计模式,要读/写数据,需要执行以下步骤。
    (1)使用fopen函数打开文件。fopen返回文件的标识符,标识符将被用在所有其他低级文件I/O函数中。
    (2)在文件上进行以下操作:
    口使用fread函数读二进制数据。
    口使用fwrite函数写二进制数据。
    口使用fgets/fgetl函数从文本文件中逐行读字符串。
    口使用fscanf函数读格式化的ASCII数据。
    口使用fprintf函数写格式化的ASCII数据。
    (3)使用fclose函数关闭文件。
    除了上述操作步骤,还将涉及读/写数据时,如何确定文件上读/写的位置,以及怎样改变位置。

    打开文件

    >>fid=fopen('fgetl.m');
    tline=fgetl(fid);
    while ischar(tline)
      disp(tline);
      tline=fgetl(fid);
    end
    fclose(fid);
    

    • 验证文件的标识符,确保能成功打开所需要的文件

    读二进制数据

    • 在MATLAB中提供了fread函数用于读二进制文件的全部或部分数据,并且将数据存在一个矩阵中,其调用格式如下:
    • 如果输入流是字节,而且fread到达了文件结尾,但是一个元素需要的字节数才读了一半,这不足一个元素的部分数据将被忽略。然而,如果输入流是位,则不足一个元素的部分数据将被返回作为最后的值。

    写二进制数据

    • fwrite函数用指定的格式将矩阵的元素写到文件,并返回已写的元素数,其调用格式如下:
    >> fid=fopen('magic5.bin','w');
    s=fwrite(fid,magic(5),'integer*4');
    fclose(fid);
    s
    
    s =
    
        25
    

    控制文件的读写位置

    • 一旦使用fopen函数打开文件,MATLAB就维持一个文件位置操作指针,用于指示文件上的特定位置。MATLAB利用文件指针确定下一个读或写操作开始的地方法。如何知道文件指针是否在文件的结束(EOF)?如何将指针移动到指定位置?怎样得知当前文件指针在什么地方?怎样重置指针在文件开头(BOF)?

    操纵文件指针的函数

    • 在MATLAB中提供了fseek函数用于重新设置文件指针的位置。其调用格式如下:
    fseek(fileID,offset,origin)
    status=fseek(fi1eID,offset,origin)
    

    其中,status为返回值,当status=0时,表示操作成功;当status=1时,则表示操作失败。fileID为文件标识符。offset为移动方向的值,当offset>0,向前移动offset个字节;当offset=0时,不移动;当offset<0时,向后移动offset个字节。origin为指针移动的参照点,以及对应的有效值,'bof',一1表示文件的开始;'cof',0表示文件的当前位置;'eof,1表示文件的结束。

    • 读文件test1.dat的指定数据,并写到文件test2.dat上

    取得文件指针的位置

    • 在MATLAB中提供了ftell函数用于获取文件指针的位置。其调用格式如下:
      position:ftell(fileID):ftell函数返回由fileID指定的文件上指针的当前位置,其值是相对于BOF的字节数,即position是从0开始的非负整数。如果返回给position的值为一1,则说明这次ftell函数的操作不成功,使用ferror函数可以确定错误的性质。

    查询文件输入和输出时的错误

    从文本文件逐行读字串

    • 在MATLAB中提供了fgetl与fgets函数来实现从文本文件读字符串行,并且将它们存储在字符串向量中。这两个函数的功能几乎是相同的,不同点仅在于fgets将行结束符(换行符)也存储在字符串向量中,而fgetl不能。

    fgetl函数

    • fgetl函数用于从文件读一行文本,丢弃换行符。其调用格式如下:
      tline=fgetl(fileID):从fileID指定的文件读一行字符串,放在字符串向量tline中,字符串不包含文本的行结束符。如果遇到文件结束符,将返回-1到tline中。fgetl函数只用于文本文件。

    fgets函数

    • 在MATLAB中提供了fgets函数从文件中读一行,并保留换行符。其调用格式如下:
      • tline=fgets(fileID):从fileID指定的文件读一行文本,带有行结束符,存储在变量tline中。如果遇到文件结束符(EOF),“返回-1到dine中。fgets函数只用于文本文件。
      • tline=fgets(file1D,nchar):从fileID指定的文件读一行文本,带有行结束符,返回的行最多有nchar个字符。也就是说,文件上的一行多于nchar个字符时,分几次读,但每次读nchar个字符,直到遇到行结束符或文件结束符;读到结束符的这一次,也许不够nchar个字符。

    读格式化的ASCII数据

    • 在MATLAB中提供了fscanf函数用于从ASCII文件读数据,然后把数据指定给一个或多个变量:

    x=0:.1:1;
    y=[x;exp(x)];
    fid=fopen('exp.txt','w');
    fprintf(fid,'%6.2f %12.8f
    ',y);
    fclose(fid);
    % 调用fscanf函数将ASCII文件的数据读到2列的矩阵A
    fid=fopen('exp.txt');
    A=fscanf(fid,'%g %g',[2 inf]);
    fclose(fid);
    A=A'
    

    写格式化文本文件

    • fprintf 函数与fscanf函数就像一对孪生兄弟,一个负责输出,一个负责输入。fprintf函数主要用于转换数据并将它们输出到文件或屏幕上。其调用格式如下:
    • count=fprintf(fileID,format,A,...):按format指定的格式转换矩阵A中的数据,并将它们写到fileID指定的文件中,被写的字节数将返回到count变量中,默认fileID时,将数据输出到屏幕上。

    关闭文件

  • 相关阅读:
    远程桌面连接win10问题解决
    为什么n各节点的的二叉链表中有n+1个空链域
    西门子Step7找不到有效授权的解决方法
    表达式树获取函数命名
    逆波兰表达式
    双向循环链表实践
    快速找到未知长度单链表的中间节点
    java的ArrayList(线性表)和LinkedList(双向链表)的深入学习
    23种设计模式中的访问者模式
    23种设计模式中的原型模式
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/11673665.html
Copyright © 2011-2022 走看看