董为国:《深入浅出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