zoukankan      html  css  js  c++  java
  • [精] Matlab I/O 输入输出——文本文件

    董为国:《深入浅出MATLAB7.x混合编程》

    Matlab提供多种能够进行文件读写的函数,这些函数是Matlab语言的一部分,并不需要任何额外的工具箱的支持。

    文本文件

    Matlab中对文件的读写函数可以分为2大类:高级函数低级函数。简单的说,高级函数的调用语法简单,方便使用;但是可定制性差,只适用某些特殊格式的文件类型,缺乏灵活性。

    在实际的使用中,很多人会推荐这样的一种选择原则:在读取文件时,尽量使用高级函数;在存写文件时尽量使用低级函数,因为高级函数存写文件时,文件的格式比较单一。

    高级命令

    常用的文本文件读写的高级函数包括以下8个:

    (1) 读:load

    load是Matlab中的一个内置函数。其主要功能是从文本文件或者MAT文件中把数据输入Matlab工作空间。

    如果各行的列数不相等,会出错。

    load的调用方式可以分为2种:

    命令形式:

    load bar.dat

    函数形式:

    [x] = load('bar.dat');

    (2) 读:importdata

    适合从文本文件或者特殊格式的二进制文件(比如.WAV等)中读取数据。importdata可以读取包含文字说明的文件,可以使用用户自定义的字符作为文件中每行各数据之间的分隔符,如不指定,自动以空格作为分隔符。如果各行的列数不同的话,importdata不会终止执行,而是会根据第一行的列数为准来决定输出矩阵的大小,所缺的列会以NaN代替。

    (3) 读:csvread

    用来读取用逗号隔开的数据文件。

    (4) 读:strread

    (5) 读:dlmread

    文件中不能包含说明文字。不过dlmread不但可以读取以逗号分割的数据文件,也可以读取那些用其它字符分割数据的文件。

    Matlab中.mat数据某变量保存为txt

    http://blog.csdn.net/boyhailong/article/details/7046488

    (6) 读:textread

    通过调用一个名为dataread.dll的MEX文件实现的。比前面提到的几个文件读取高级函数,textread同样具有调用语法简单的优点,同时对文件读取的可定制性更强。textread既能处理有固定格式的文件,也能处理无格式的文件,还能对文件每行的数据按列逐个读取。通常被用来处理一些已知格式的文件。{姓名,等级,X,Y,答案}

    Note: textread will be removed in a future version. Use 'textscan' instead. (Matlab 2011a)

    (7) 写:save

    save也是Matlab的一个内置函数,用来把当前Matlab工作空间的一个或者多个变量存入外部文件。在默认情况下,save命令以MAT格式存写数据,但也可以指定存写的文本方式。

    注意:save无法在文本文件中,保存复数变量。如果有复数时,save只保存它们的实部。另外,对于结构型变量,save只能保存结构型标量,而不能保存结构型变量数组。

    '-mat'  Binary MAT-file format (default).
    '-ascii'  8-digit ASCII format.
    '-ascii', '-tabs' Tab-delimited 8-digit ASCII format.
    '-ascii', '-double' 16-digit ASCII format.
    '-ascii', '-double', '-tabs'     Tab-delimited 16-digit ASCII format.

     

     

     

     

    For more flexibility in creating ASCII files, use 'dlmwrite' or 'fprintf'. (Matlab 2011a)

    (8) 写:dlmwrite

    Write matrix to ASCII-delimited file

     

    低级命令

    这些命令和C语言里对文件的读写函数非常类似。操作过程一般包括:打开文件;读写文件;关闭文件。

    常用的文件读写低级命令有如下7个:

    (1) fopen

    fopen能够打开文件,也能够从打开的文件中获得信息。默认情况下,fopen以二进制格式打开文件。

    注意:如果文件打开模式里用“+”,如“a+t”、“w+t”等,对文件的读和写必须用fseek或者frewind隔开。

    (2) fclose

    文件打开、使用后最好关闭,以方便对该文件的其他操作。使用fopen打开文件以后,系统会把这个文件标记为"正在使用";使用fclose会清除这个标记,否则会影响到对文件的修改、删除等操作。

    (3) fgetl

    能够读取指定文件中的一行内容,但不包括新行分隔符。用fopen打开文件后,文件的读取位置是文件开头的地方,以后每次调用fgetl,这个读取位置会自动更新到下一行,一直到文件结尾的地方。

    (4) fgets

    fgets的功能和fgetl类似,都是读取当前文件读取位置所对应的下一行内容。区别在于,fgets将包含该行的新行标志。

    (5) fscanf

    fscanf具有更多的灵活性,能够读取有格式的文本文件。

    注意:用%s读取字符串后,其中的每个字符会被看成是返回的矩阵里的一个元素。而且,%s会忽略文件中的空格键。如果需要读取空格,则必须用%c。

    (6) textscan

    textscan是Matlab 7.0新增加的内置函数。它能够更为高效和灵活地读取文本文件数据,其和高级命令textread相似,但textcan能够更好地处理大型文件。textscan能从文件的任何地方开始读取数据,对于数据的转换,textscan提供了更多的选项。

    注意:textscan读取数据最大值uint32(4294967295),文件中相应的数字如果大于这个数,则被这个极限数字代替。

    (7) fprintf

    fprintf能够以类似于ANSI C语言中的有关函数那样按照用户指定的格式把数据打印文本信息。根据调用参数的不同,fprintf可以在文件或者屏幕上输出结果。

    Write data to text file

  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/xfzhang/p/1913309.html
Copyright © 2011-2022 走看看