Matlab从入门到精通(九)--文件操作

  1. 文件的打开

fopen函数的调用格式为:

fid= fopen(文件名,打开方式)

其中文件名用字符串形式,表示待打开的数据文件。常见的打开方式有:‘r’表示对打开的文件读数据,‘w’表示对打开的文件写数据,‘a’表示在打开的文件末尾添加数据。fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。

例:fid=fopen(‘magic5.dat’,‘w’);

2、文件的关闭

文件在进行完读、写等操作后,应及时关闭。关闭文件用fclose函数,调用格式为:sta=fclose(fid)

该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1.

3、文件的读写操作

3.1、读二进制文件

fread 函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:

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

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

  1.      N表示读取 N个元素到一个列向量。
    (2) Inf表示读取整个文件。
    (3) [M,N]表示读数据到M×N的矩阵中,数据按列存放。
    precision代表读写数据的类型

【例一】:

fid = fopen('E:\\1.txt','r');

[A,count] = fread(fid,Inf,'int8=>char');

Count   %输出文件中内容的长度

fclose('all');      %关闭打开的所有文件

【例二】

fid = fopen('E:\\1.txt','r');

A = fread(fid,Inf,'int8=>char');  %将读取的数据变为字符型

size(A)    %输出数据的长度

A'    %横向输出文本内容

fclose(fid);

【例三】

fid = fopen('E:\\2.jpg','r');

A = fread(fid,Inf,'int8');

size(A)

A'

fclose(fid);

3.2、写二进制文件

fwrite 函数按照指定的数据类型将矩阵中的元素写入到文件中。其调用格式为:
COUNT=fwrite (fid, A, precision)
其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。

【例】:

例4-1  建立一数据文件magic5.dat,用于存放5阶魔方阵。
程序如下:
fid=fopen(‘magic5.dat’,‘w’);
cnt=fwrite(fid,magic(5),‘int32’);
fclose(fid);

3.3、读取文本文件(一)

fscanf 函数的调用格式为:
[A,COUNT]= fscanf (fid, format, size)
其中A用以存放读取的数据,COUNT返回所读取的数据元素个数。fid为文件句柄。format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s。
size为可选项,决定矩阵A中数据的排列形式。

3.5、读取文本文件(二)

fid = fopen('result.txt','r');

data = textscan(fid,'%s %s \r\n');

data

此时会将文件中的所有数据一次性读取到一个二维cell型数组中.如果想一次只读一行可以用如果方法:

fid = fopen('result.txt','r');

data = textscan(fid,'%s %s \r\n',1);

data

3.6、读取文本文件(三)

一次读取一行还可以用如下办法:

fid = fopen('result.txt','r');

while ~feof(fid)%判断是否达到文件尾部

aline = fgetl(fid) ;

end

data = aline(3)%取出该行的第3个字符

3.7、读取文本文件(四)

如果文本文件中内容格式如下:

此时用如下方式读取较好:

fid = fopen('result.txt','r');

data = textscan(fid,'%s %s \r\n',1);%读取标题行

index = 1 ;

while ~feof(fid)

    data{index} = textscan(fid,'%s%s \r\n',1);%读取第(index+1)行

    index = index + 1 ;

end

此时读取的内容存储在cell型数组data中。

例如:

>> data{1}{1}

ans =

'10110111'

>> data{1}{2}

ans =

    '10'

其它元素也可以依次访问.

3.8、写文本文件

fprintf 函数的调用格式为:
COUNT= fprintf(fid, format, A)
其中A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件。格式符与fscanf函数相同。

4、数据文件定位

MATLAB提供了与文件定位操作有关的函数fseek和ftell。fseek函数用于定位文件位置指针,其调用格式为:
status=fseek(fid, offset, origin)
其中fid为文件句柄,offset表示位置指针相对移动的字节数,origin表示位置指针移动的参照位置。若定位成功,status返回值为0,否则返回值为–1。

ftell函数返回文件指针的当前位置,其调用格式为:
position=ftell (fid)
返回值为从文件开始到指针当前位置的字节数。若返回值为–1表示获取文件当前位置失败。

【例】:

fid = fopen('E:\\1.txt','r');

A = fread(fid,Inf,'int8=>char');

size(A)

A'

status=fseek(fid, 5, 'bof')

position = ftell(fid)

fclose(fid);

5、在编辑窗口直接打开文件

在Command窗口输入命令:

>>open E:\\txt.m

则可直接打开文件.

6、其它文件操作函数

fclose :关闭文件

fopen :打开文件

fread :从文件中读入二进制数据

fwrite :把二进制数据写入文件

fgetl :逐行从文件中读取数据并放弃换行符

fgets :从文件中读取行,保留换行符并把行作为字符串返回

fprintf:把格式化数据写入文件

fscanf :从文件中读取格式化数据

feof :测试文件是否结束

ferror:测试文件输入输出错误信息

frewind:文件指针归零

fseek :设置文件位置指针

ftell :获取文件位置指针

csvread :读取逗号分隔格式的数据文件到矩阵

csvwrite:写矩阵到逗号分隔格式的数据文件

dlmread :把一个ASCII限定文件(数据文件)读入矩阵

dlmwrite:把矩阵写入到ASCII限定文件(数据文件)

textread:从文本文件读取格式化数据(important)

wk1read :把Lotus123电子表格读入矩阵

wk1write:把矩阵写入Lotus123wk1电子表格

xlsread :读取excel表格

7、excel文件操作

7.1获取文件信息

status = xlsfinfo(filename)

[status,sheets] = xlsfinfo(filename)

[status,sheets,format] = xlsfinfo(filename)

status为目标excel可读属性,sheets为目标excel中所有工作表,format返回excel文件的描述信息。

【例】

[typ, desc, fmt] = xlsfinfo('myaccount.xlsx')

This code returns:

typ =

    Microsoft Excel Spreadsheet

desc =

    'Sheet1'    'Income'    'Expenses'

fmt =

xlOpenXMLWorkbook

system('taskkill /F /IM EXCEL.EXE');%杀死excel进程,对于高版本matlab会自动释放资源。

7.2读取excel文件内容

可以使用matlab的导入数据直接将excel中的数据导入到matlab中。

使用xlsread函数读取excel文件内容

【例1】读取第一张工作表内容

A = xlsread('myExample.xls')

xlsread returns:

A =

     1     2     3

     4     5   NaN

     7     8     9

【例2】读取第一张工作表的B2:C3区域内容

subsetA = xlsread('myExample.xls', 1, 'B2:C3')

xlsread returns:

subsetA =

     2     3

     5   NaN

【例3】假设excel文件内容如下

[ndata, text, alldata] = xlsread('myExample.xls')

xlsread returns:

ndata =

     1     2     3

     4     5   NaN

     7     8     9

text =

    'First'    'Second'    'Third'

    ''         ''          ''    

    ''         ''          'x'   

alldata =

    'First'    'Second'    'Third'

    [    1]    [     2]    [    3]

    [    4]    [     5]    'x'   

[    7]    [     8]    [    9]

7.4写入数据到excel文件

单击“工具”菜单,选择“加载宏”选项,在弹出的加载宏界面中单击“浏览”按钮,通过浏览界面在路径“matlab 的安装路径\toolbox\exlink\” 下找到excllink.xla 文件,双击打开此文件则回到加载宏界面,在 Excel link2.3 for use with matlab 选项前打勾,点击“确定”按钮即可完成加载。加载 Excel-link 宏成功后会在 Excel 工具栏的下方出现“startmatlab、putmatrix、getmatrix、evalstring” 等选项,通过这些选项可以实现 Matlab 与 Excel 之间的数据交互。

使用函数xlswrite写入数据到excel文件。语法如下:

xlswrite(filename,A)

xlswrite(filename,A,sheet)

xlswrite(filename,A,range)

xlswrite(filename,A,sheet,range)

status = xlswrite(filename,A,sheet,range)

[status,msg] = xlswrite(filename,A,sheet,range)

【例】

猜你喜欢

转载自blog.csdn.net/huzhizhewudi/article/details/84404565