现在的位置: 首页 > 综合 > 正文

Matlab 文件读写函数

2013年07月02日 ⁄ 综合 ⁄ 共 2359字 ⁄ 字号 评论关闭

董为国:《深入浅出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不但可以读取以逗号分割的数据文件,也可以读取那些用其它字符分割数据的文件。

(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

抱歉!评论已关闭.