1.1  文件的打开和关闭
1.1.1  文件的打开
fopen ('filename', 'mode')
mode格式有:
 ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
 ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
 ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
 ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
 ‘a’:在打开的文件末端添加数据。文件不存在则创建。
 ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。
如果rt表示该文件以文本方式打开,如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
Fopen函数两个返回值:
1、一个是返回一个文件标识(file Identifier),它会作为参数被传入其他对文件进行读写操作的命令,通常是一个非负的整数,可用此标识来对此文件进行各种处理。(如果返回的文件标识是–1,则代表fopen无法打开文件,其原因可能是文件不存在,或是用户无法打开此文件权限);
2、另一个返回值就是message,用于返回无法打开文件的原因;
例:1-1
[f,message]=fopen('fileexam1', 'r')
if f==-1
disp(message);  %显示错误信息
end
(若文件fileexam1不存在,则显示如下信息。
Cannot istence?permissions?memory?)
例:1-2
[f,message]=fopen('fileexam2', 'r');
if f==-1
disp (message);    %显示错误信息
  else
    disp(f);
end
若文件fileexam2存在,则返回f值。
1.1.2文件的关闭
Fclose(f)
F为打开文件的标志,若若fclose函数返回值为0,则表示成功关闭f标志的文件;若返回值为–1,则表示无法成功关闭该文件。(打开和关闭文件比较耗时,最好不要在循环体内使用文件)
若要一次关闭打开的所有文件,可以使用下面的命令:fclose all
1.2  文 本 数 据
MATLAB自带的MAT文件为二进制文件,但为了便于和外部程序进行交换以及方便查看文件中的数据,也常常采用文本数据格式(数据采用ASCII码格式,可以表示字母和数字字符)与外界进行数据交换。
1.2.1 从文本文件中读取数据
1、使用导入模板来读取数据
2、使用函数来读取文本数据
函    数
csvread
dlmread
fscanf
load
textread
数 据 类 型
数值数据
数值数据
字母和数值
数值数据
字母和数值
分  隔  符
仅cooma
任何字符
任何字符
仅space
任何字符
返  回  值
1
1
1
1
多返回值
如:A=load('');
3、读取有分隔符的ASCII数据文件
如果数据文件不使用空格符而是使用逗号或是其他符号作为分隔符,用户可以选择多个可用的导入数据函数。最简单的便是使用函数dlmread。
例2-1
lcode.dat
0.3445,0.8433,0.7865
0.7562,0.4233,0
A=dlmread('lcode.dat',',')
(分隔符只能选取单个字符,不能用字符串来作为分隔符)
4. 使用文本头读取数值数据
要读取一个包含文本头的ASCII码数据文件,可以使用textread函数,并指定头行参数。Textread既能处理有固定格式的文件,也可以处理无格式的文件,还可以对文件中每行数据按列逐个读取。
textread函数常见的调用方法有如下几种:
[A,]=textread('filename', 'format')
[A,]=textread('filename', 'format',N)
例2-2
num1    num2    num3    num4
0.3242  0.4324  0.3455  0.6754
0.4566  0.9368  0.9892  0.9274
0.4658  0.2832  0.9373  0.8233
因为有文件头,要使用如下textread命令来读取文件中的数据。
>> [num1 num2 num3 num4]=textread('','%f %f %f %f','headerlines',1)
执行结果如下:
num1 =
    0.3242
    0.4566
    0.4658
num2 =
    0.4324
    0.9368
    0.2832
num3 =
    0.3455
    0.9892
    0.9373
num4 =
    0.6754
    0.9274
    0.8233
5. 读取字母数值混合的数据
例2-3
文件my_exam.dat包含的混合的字母和数值如下:
Joe    gradeA  4.9  pass
susan  gradeD  2.0  fail
如果想把4列数据全部读取出放在4个变量中,则使用如下命令:
>> [name  gra  grades  answer]=textread('my_exam.dat','%s %s %f %s')
textread 函数按格式字符串中指定的格式处理文件中的某个数据项,并把值放在输出变量中。输出变量的数目必须和格式字符串中指定的变换数目项匹配,在该例中,函数按格式字符串来读取文件
若文件采用的分隔符不是空格,则必须使用函数textread ,将该分隔符作为它的参数。例如,若文件my_exam.dat 使用分号作为分隔符,则读入该文件需使用如下命令:
[name  gra  grades  ans]=textread('my_exam.dat','%s %s %f %s', 'delimiter', '; ')
2 文件的存储
2.1 文件存写函数
函    数
csvwrite
diary
dlmwrite
fprintf
save
数 据 类 型
数值数据
数值数据或单元阵列
数值数据
字母和数值数据
数值数据
分  隔  符
逗号
空格
任何字符
任何字符
制表符或空格符
1. 存写有分隔符的ASCII码数据文件
若要将当前的MATLAB工作空间的一个或多个变量写到一个有分隔符的ASCII码文件中,可以使用save命令或dlmwrite函数。在默认情况下,save命令是以 MAT 格式存写数据的。
3-1
>> clear all;
>> x=rand(2,3);
>> save my_test1.dat x -ascii;
结果为:
9.2181297e-001  1.7626614e-001  9.3546970e-001
  7.3820725e-001  4.0570621e-001  9.1690444e-001
2.2 使用文件I/O函数
2.2.1格式化写入文本数据
例3-2
创建一个2×2的魔方矩阵,然后打开一文件,写入数据。fprintf格式
>> clear all;
>> x=magic(2);
>> fid=fopen('','w');
>> fprintf(fid,'%4.2f  %8.4f\n',x);
>> fclose(fid);
>> x
x =
    1    3
    4    2
>>
1.00    4.0000
3.00    2.0000
fprintf函数存储的时候按行读取,然后按列存写
2.2.2 控制文件位置指针
Fseek                    frewind
设定指针位置    重设指针到文件起始位置
Ftell                    feof
获得指针位置    测试指针是否在文件结束位置
1、fseek函数用法
fseek 函数用于指定文件指针的位置,调用方式如下:
status=fseek(fid,offset,origin)
fid是指定的文件标识符。offset为整数型变量,表示相对于指定位置需要的偏移字节数,正数表示向文件末尾偏移,负数表示向文件开头偏移。Origin可以是特定字符串,也可以是整数,表示文件中的参考位置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。