文章目录
前言
一、文件的打开与关闭
1.1、文件的打开
1.2、文件的关闭
二、文件的读写操作
2.1、二进制文件的读写操作
2.2、文本文件的读写操作
三、数据文件定位
总结
前言
经过前面一段时间的学习,相信大家已经能较为熟练的在MATLAB软件中进行简单的程序设计了,那么今天就来学习一下MATLAB文件操作,利用MATLAB程序与文本文件进行功能交互。
文件操作是一种很重要的输入输出方式,即从数据文件中读取数据或者将计算结果写入数据文件。MATLAB提供了一系列底层输入输出函数,专门用于文件操作。MATLAB文件操作主要有3个步骤,首先是打开文件,然后是对文件进行读或者写操作,最后要关闭文件。
一、文件的打开与关闭
1.1、文件的打开
在进行文件的读写操作之前,首先要用fopen函数打开文件,并指定允许对该文件进行的操作,也就是打开方式。
fopen函数的调用格式为:
fid = fopen(文件名,打开方式)
例如,打开一个名为data.txt的文件,并进行读操作,其命令为:
fid = fopen('data.txt','r')
其中fid是用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对给数据文件进行操作。如果句柄值大于0,则说明文件打开成功;若打开文件失败后,fid返回值为-1,此时不能对文件进行任何操作。但是有3个标准代码文件,不需要打开就可以直接使用,句柄值分别为fid = 0,代表标准输入文件,一般指键盘;fid = 1表示标准输出文件,通常为显示器;fid = 2表示错误输出信息文件,一般也为显示器。
文件名用字符串形式,表示待打开的数据文件。
常见的打开方式有:
① 'r' :表示打开文件读数据,被打开的文件必须存在;
② 'w':表示对打开的文件写数据,若文件不存在,系统会自动建立新文件;
③ 'a' :表示在打开的文件末尾添加数据,若文件不存在,系统会自动建立新文件;
④ 'r+' :表示对打开的文件既可以读数据,又可以写数据,文件必须存在;
⑤ 'w+':表示对打开的文件既可以读数据,又可以写数据,若文件不存在,建立新文件;
⑥ 'a+' :表示对打开的文件既可以读数据,又可以写数据,还可以在文末添加数据,若文件不存在,系统会自动建立新文件。
注意:文本数据格式有两种形式:二进制文件和文本文件;fopen默认打开的是二进制文件,如果要打开文本文件,就需要在打开方式字符串后面加一个字符t,如'rt‘就表以只读方式打开文本格式的数据文件。
1.2、文件的关闭
文件在进行完读、写等操作后,应及时关闭。
关闭文件用fclose函数,其调用格式为:
sta = fclose(fid)
该函数关闭fid所表示的文件,sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
二、文件的读写操作
2.1、二进制文件的读写操作
1、读二进制文件
fread函数可以读取二进制文件的数据,并将数据存入矩阵。
fread的调用格式为:[A,COUNT] = fread(fid,size,precision)
其中A用于存放读取的数据,COUNT返回所读取的数据个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以为:
① N:表示读取N个元素到一个列向量;
② Inf:表示读取整个文件;
③ [M,N]:表示读取数据到M*N的矩阵中,数据按列存放。
precision代表读写数据的类型,常用的数据类型如下:
标识符 |
说明 |
标识符 |
说明 |
‘char’ |
有符号字符 |
‘int’ |
32位有符号整数 |
‘uchar’ |
无符号字符 |
‘uint’ |
32位无符号整数 |
‘schar’ |
有符号字符 |
‘float’ |
32位浮点数 |
‘int8’ |
8位有符号整数 |
‘float32’ |
32位浮点数 |
‘int16’ |
16位有符号整数 |
‘float64’ |
64位浮点数 |
‘int32’ |
32位有符号整数 |
‘long’ |
32位或64位有符号整数 |
‘int64’ |
64位有符号整数 |
‘ulong’ |
32位或64位无符号整数 |
‘uint8’ |
8位无符号整数 |
‘short’ |
16位有符号整数 |
‘uint16’ |
16位无符号整数 |
‘ushort’ |
16位无符号整数 |
‘uint32’ |
32位无符号整数 |
‘double’ |
64位双类型数 |
‘uint64’ |
64位无符号整数 |
|
|
以上例子就是以读的方式打开数据文件std.dat,然后按长整型数据格式读取该文件的前100个数据放入向量A,最后关闭文件。
2、写二进制文件
fwrite函数可以按照指定的数据类型将矩阵中的元素写入到文件中。
fwrite函数的调用格式为:
COUNT = fwrite(fid,A,precision)
其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。
以上例子所表述的就是将矩阵X中的数据以浮点数的格式写入data.bin文件。
2.2、文本文件的读写操作
1、读文本文件
fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。
fscanf函数的调用格式为:
[A,COUNT] = fscanf(fid,format,size)
其中A用以存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用以控制读取的数据个数,由%加上格式符组成,size为可选项。
常见的格式符有:
① d :读入整型数据;
② f :读入浮点型数据;
③ c :读入字符型数据;
④ s :读入字符串;
在%之后还可以加上数据宽度,例如%3d,它控制读取数据取3位数字。
2、写文本文件
fprintf函数可以将数据按指定格式写入到文本文件中。
fprintf函数的调用格式为:
COUNT = fprintf(fid,format,A)
其中A存放要写入文件的数据,先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件,格式符与fscanf函数相同。
三、数据文件定位
当打开文件并进行数据的读写时,需要判断和控制文件的读写位置,例如判断文件数据是否读完,或者需要读写指定位置上的数据等。MATLAB提供了与文件定位操作有关的函数fseek和ftell。通过这两个函数用户可以设定或获取文件指针位置。
fseek函数的调用格式为:
status = fseek(fid,offset,origin)
其中fid为文件句柄,offest表示位置指针相对移动的字节数,若为正整数表示向文件尾方向移动,若为负整数表示向文件头方向移动,origin表示位置指针移动的参照位置,它的取值有3种可能:
① cof :表示文件的当前位置;
② bof :表示文件的开始位置;
③ eof :表示文件的结束位置;
若定位成功,status返回值为1,否则返回值为-1。
ftell函数的调用格式为:
position = ftell(fid)
返回值为从文件开始到指针当前位置的字节数,若返回值为-1表示获取文件当前位置失败。
总结
今天学习了数据文件在MATLAB中的操作,包括二进制文件和文本文件的读写操作,以及如何定位数据文件的位置。经过这一部分的学习,我们就可以将MATLAB与文本文件进行联系起来了,就可以做一些任务开发了,比如利用MATLAB分析文本文件中的数据,根据数据来做算法等等!当然这些都是后话啦,现在基础还没牢固,还是先学爬再学走吧,加油!!!