admin 管理员组

文章数量: 887053


2024年1月5日发(作者:css3圆角怎么做)

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 open nce?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('my_');

3、读取有分隔符的ASCII数据文件

如果数据文件不使用空格符而是使用逗号或是其他符号作为分隔符,用户可以选择多个可用的导入数据函数。最简单的便是使用函数dlmread。

例2-1

0.3445,0.8433,0.7865

0.7562,0.4233,0

A=dlmread('',',')

(分隔符只能选取单个字符,不能用字符串来作为分隔符)

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('my_','%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_包含的混合的字母和数值如下:

Joe gradeA 4.9 pass

susan gradeD 2.0 fail

如果想把4列数据全部读取出放在4个变量中,则使用如下命令:

>> [name gra grades answer]=textread('my_','%s %s %f %s')

(textread 函数按格式字符串中指定的格式处理文件中的某个数据项,并把值放在输出变量中。输出变量的数目必须和格式字符串中指定的变换数目项匹配,在该例中,函数按格式字符串来读取文件)

若文件采用的分隔符不是空格,则必须使用函数textread ,将该分隔符作为它的参数。例如,若文件my_ 使用分号作为分隔符,则读入该文件需使用如下命令:

[name gra grades ans]=textread('my_','%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_ 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的魔方矩阵,然后打开一文件,写入数据。

>> clear all;

>> x=magic(2);

>> fid=fopen('','w');

>> fprintf(fid,'%4.2f %8.4fn',x);

>> fclose(fid);

>> x

x =

1 3

4 2

>> type

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可以是特定字符串,也可以是整数,表示文件中的参考位置。

参考位置说明:'bof '或者 -1 文件开头 'cof '或者 0 文件中当前位置

'eof '或者 1 文件末尾

2、ftell函数用法

ftell 函数用来获得当前文件指针的位置,调用方式如下:

position=ftell(fid)

fid是指定的文件标识符。Position为返回值,表示当前指针的位置。position是以相对于文件开头的字节数来表示的。如果返回值为–1,表示未能成功调用。这是可以通过调用feeeor(fid)的具体的错误信息。

3、frewind函数用法

frewind 函数用来把文件指针重新复位到文件开头。调用方式如下:

frewind(fid)

其中fid为指定的文件标识符,其作用和fseek(fid,0,-1)是等效的。

4、feof函数用法

feof 函数用来判断是否到达文件末尾。调用方式如下:

eofstat=feof(fid)

其中fid为指定的文件标识符。eofstat是返回值,当到达文件末尾时,eofstat为1;否则为0。

例3-3

f=fopen('my_','r');

>> A=fscanf(f,'%g',[4 2])

A =

0.4565 0.4447

0.8214 0.7919

0.6154 0

0.0185 0

>>feof(f)

ans=

1

%c读取字符型变量,也可以指定多个字符,'%3c'

%s读取字符串变量

%d读取整数型变量

%f读取浮点数

%g读取双精度浮点数

3、fprintf函数功能

fprintf(fileID, format, A)

count = fprintf(...) fprintf写入返回数字的字节。

1、 Format:使用单引号的字符串,它描述了输出字段的格式。可以包括下列组合:百分号后跟一个转换字符,如'%s的为字符串'。

1)转义字符

单引号

反斜杠

退格

换页

新行

回车

水平制表符

%%

百分比字符

b

f

n

t

1

报警

v

垂直制表

xN

十六进制数N

N

八进制数N

(2)数值类型字符

(3)字段宽度

最小的字符数进行打印。可以是一个数字或一个星号(*)是指输入列表中的一个论据。例如,输入列表('%12d,intmax)相当于('%* D',12,intmax)。

精确宽度

For %f, %e, or %E:

例如:'%6.4f'打印为'3.1416圆周率'

For %g or %G

(3) 标志

行动

左对齐

打印符号字符(+或 - )。

插入前的价值空间。

垫零

标志

'–'

' '

'0'

例子

%-5.2f

% 5.2f

%05.2f

%#5.0f

数位有效数字。

例如:'%6.4G打印为PI '3.142'

'+' 《Simulink与信号处理》

%+5.2f

修改选定的数字转换: '#'

%o, %x, or %X,打印0,为0x或0X的前缀。

%f, %e, or %E,,打印精度小数点,即使是0。

为%g或%G号,请不要删除或尾随零小数点。


本文标签: 文件 打开 函数 数据 使用