Matlab的基本文件操作

来源:互联网 发布:爱淘宝怎么返利多少 编辑:程序博客网 时间:2024/06/05 06:13

Matlab环境下的文件与其它系统一样,也有二类文件组成,一是文件,又称M文件,另一类是数据文件。系统除提供了文件的一般管理功能外,还提供了对数据文件进行操作的特殊功能函数。

1  基本命令

1. help  帮助命令

格式:   help 命令名

例如: help plot

                     helpmatlab\general

2. what  显示目录内容命令

格式: what [目录名]

例如:: what matlab

     显示matlab目录下的所有M-文件

3type 显示文件内容命令

格式: type文件名

显示M-文件的内容。

4. 寻找命令

格式: lookfor  命令或字符串

寻找命令或字符串是否存在。

例如: lookfor  cos

5which 寻找函数命令

格式:which  函数名

显示函数所在的文件位置,给出路径。

例如: which  pinv

path 路径控制命令

格式: path [路径]

显示或改变搜索路径。

例如: path path‘d\test\aaa’)

7who,whos 显示变量命令

显示当前变量。 whos命令更详细。

load,save  取出与保存结果命令

从磁盘上读出或保存计算结果。

例如: save test  

将变量存入test.mat文件中。

例如: save test x y  仅保存变量。

clear  清除变量命令

格式: [变量名]

例如: clear x y

10 disp  显示文本或变量内容命令

例如:x=[1 2 3]

            disp(x)

            y=‘aaaaaaa’

            disp(y)

11 cd  改变目录命令

DOS类似。

12 dir  显示目录内容命令

显示目录里的文件。

例如:dir \matlab\notebook

13delete 删除文件或对象命令

格式: delete 文件名    不能用通配符

             delete(对象)

例如:H=PLOTXX

             delete (H)

      删除图形对象H

14.! 执行系统命令

Windows下运行。用于执行DOS命令。

例如:!dir *.exe

显示当前目录里的EXE文件。

文件的打开与关闭

Matlab提供了对数据文件建立、打开、读、写以及关闭等一系列函数,数据文件一般存放在磁盘等介质上,用文件名标识,系统对文件名没有特殊要求。文件数据格式有二种形式,一是二进制格式文件,二是ASCII文本文件,系统对这两类文件提供了不同的读写功能函数。

1  fopen打开文件

在读写文件之前,必须先用fopen命令打开一个文件,并指定允许对该文件进行的操作。文件操作结束后,应及时关闭文件,以免数据的丢失或误修改。fopen函数格式为:

Fid= fopen(filenamepermission)

其中filename为文件名,permission为文件格式,可以是下列格式之一:

‘r’   打开文件,读数据,文件必须存在。

‘w’  打开文件,写数据,若文件不存在,系统会自动建立。

‘a’   打开文件,在文件末尾添加数据。

‘r+’  打开文件,可以读和写数据,文件必须存在。

‘w+’  打开文件,供读与写数据用。

‘a+’  打开文件,供读与添加数据用。

‘W’  打开文件供写数据用,无自动刷新功能。

‘A’  打开文件供添加数据用,无自动刷新功能。

例如:打开一个名为std.dat的数据文件并进行读操作,其命令格式为:

Fid=fopen( ‘std.dat’, ’r’ )

上述打开格式均为二进制格式,如果想用ASCII文本格式,则必须在格式字符串中加上字符t,例如用’r t’表示以ASCII格式打开供读操作的数据文件

2  fclose关闭文件

文件在进行完读、写等操作后,应及时关闭,以保证文件的安全可靠。关闭文件命令格式为:

Sta=fclose(Fid)   关闭Fid所表示的文件

Sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1

文件的读写操作

二进制数据文件

fread 读二进制数据文件。格式为:

[A,COUNT]=fread(Fid,size,precision)

其中A为数据矩阵,COUNT返回所读取的数据元素个数。size为可选项,若不选用则读取整个文件内容,若选用它的值可以是下列值:

N      读取 N个元素到一个列向量。

inf     读取整个文件。

[M,N]  读数据到M×N的矩阵中,数据按列存放。

precision用于控制所读数据的精度格式。

缺省格式为uchar,即无符号字符格式。例如:Fid=fopen(‘std.dat’, ‘r’);

            A=fread(Fid, 100, ’long’);

            Sta=fclose(fid);

以读数据方式打开数据文件std.dat,并按长整型数据格式读取文件的前100个数据放入向量A,然后关闭文件。

fwrite 函数以二进制格式向数据文件写数据,其格式为:

COUNT=fwrite (Fid, A, precision)

例如:Fid=fopen(‘magic5.bin’, ‘wb’);

fwrite(Fid, magic, ’int32’);

上述语句将矩阵magic中的数据写入文件magic5.bin中,数据格式为32位整型二进制格式。

例1 建立一数据文件test.dat,用于存放矩阵A的数据。

已知  A=[-0.6515  -0.2727  -0.4354  -0.3190  -0.9047

         -0.7534  -0.4567  -0.3212  -0.4132  -0.3583

         -0.9264  -0.8173  -0.7823  -0.3265  -0.0631

         -0.1735  -0.7373  -0.0972  -0.3267  -0.6298

         -0.4768  -0.6773  -0.6574  -0.1923  -0.4389]

Fid=fopen(‘test.dat’, ‘w’)

cnt=fwrite(Fid, A, ‘float’)

fclose(Fid)

程序段将矩阵A的数据以二进制浮点数格式写入文件test.dat中。

Fid=fopen(‘test.dat’, ‘r’)

[B,cnt]=fread(Fid, [5,inf], ‘float’)

fclose(Fid)

读取文件test.dat的内容。

2  文本文件

fscanf  ASCII文本文件

[A,COUNT]= fscanf (Fid, format, size)

其中A为数据矩阵,用以存放读取的数据,COUNT返回所读取的数据元素个数。

format用以控制读取的数据格式,由%加上格式符组成,格式符为:

d, i, o, u, x, e, f, g, s, c[. . .]  

例如:

s=fscanf(fid, ‘%s’)      读取一个字符串

a=fscanf(fid, ‘%5d’)     读取5位数的整数

b= fscanf(fid, ‘%6.2d’)   读取浮点数

fprintf  ASCII数据文件,其格式为:

       COUNT= fprintf(Fid, format, A,…)

其中A为要写入文件的数据矩阵,先按format格式化数据矩阵A,后写入到Fid所指定的文件。

例如:x = 0: 0.1: 1;  

        y = [x; exp(x)];

       Fid = fopen('exp.txt', 'w');

       fprintf(Fid,'%6.2f  %12.8f\n',y);

       fclose(Fid);

数据文件定位写操作

1.fseek函数定位文件位置指针,格式为:

status=fseekFid, offset, origin)

其中Fid为文件句柄,offset表示位置指针相对移动的字节数,若为正整数表示向文件尾方向移动,若为负整数表示向文件头方向移动,origin表示位置指针移动的参照位置,它的取值有三种可能:’cof ’表示文件的当前位置,’bof ’表示文件的开始位置,’eof ’表示文件的结束位置。若定位成功status返回值为0,否则返回值为–1

2. ftell函数返回文件指针的当前位置。

其格式为:

          position=ftell (Fid)

返回值为从文件开始到指针当前位置的字节数。若返回值为–1表示获取文件当前位置失败

【例2】下述程序段说明了函数fseekftell的使用。

  a=[1: 5];

 Fid=fopen(‘fdat.bin’, ‘w’);   以写方式打开文件fdat.bin

 fwrite(Fid, a, ‘int16’ );      a中的5个数据元素分别以         双字节整型格式写入

 status=fclose(Fid);             文件fdat.bin

 Fid=fopen(‘fdat.bin’, ‘r’); 以读数据方式打开文件

status=fseek(Fid, 6, ‘bof’);       将文件数据指针从开始位置向尾部移动6个字节

four=fread(Fid, 1, ‘int16’);  读取当前数据,即第4个数据,并移动指针到下一个数据

position=ftell(Fid);             

eight=fread(Fid, 1, ‘int16’);      读取第8个数据

status=fclose(Fid);

原创粉丝点击