matlab中二进制数据的读取.docx

上传人:b****5 文档编号:8731589 上传时间:2023-05-14 格式:DOCX 页数:26 大小:49.91KB
下载 相关 举报
matlab中二进制数据的读取.docx_第1页
第1页 / 共26页
matlab中二进制数据的读取.docx_第2页
第2页 / 共26页
matlab中二进制数据的读取.docx_第3页
第3页 / 共26页
matlab中二进制数据的读取.docx_第4页
第4页 / 共26页
matlab中二进制数据的读取.docx_第5页
第5页 / 共26页
matlab中二进制数据的读取.docx_第6页
第6页 / 共26页
matlab中二进制数据的读取.docx_第7页
第7页 / 共26页
matlab中二进制数据的读取.docx_第8页
第8页 / 共26页
matlab中二进制数据的读取.docx_第9页
第9页 / 共26页
matlab中二进制数据的读取.docx_第10页
第10页 / 共26页
matlab中二进制数据的读取.docx_第11页
第11页 / 共26页
matlab中二进制数据的读取.docx_第12页
第12页 / 共26页
matlab中二进制数据的读取.docx_第13页
第13页 / 共26页
matlab中二进制数据的读取.docx_第14页
第14页 / 共26页
matlab中二进制数据的读取.docx_第15页
第15页 / 共26页
matlab中二进制数据的读取.docx_第16页
第16页 / 共26页
matlab中二进制数据的读取.docx_第17页
第17页 / 共26页
matlab中二进制数据的读取.docx_第18页
第18页 / 共26页
matlab中二进制数据的读取.docx_第19页
第19页 / 共26页
matlab中二进制数据的读取.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

matlab中二进制数据的读取.docx

《matlab中二进制数据的读取.docx》由会员分享,可在线阅读,更多相关《matlab中二进制数据的读取.docx(26页珍藏版)》请在冰点文库上搜索。

matlab中二进制数据的读取.docx

matlab中二进制数据的读取

MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据;将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据。

至于选择哪种机制,则根据下面两个因素决定:

●    用户所执行的操作是导入数据还是导出数据;

●    数据的格式为文本格式、二进制格式还是如HDF之类的标准格式。

将数据导入MATLAB中最容易的方法就是使用导入数据模板(ImportWizard),使用该模板时不需要知道数据的格式,只需指定包含这些数据的文件,然后导入模板会自动处理文件内容。

本章重点内容如下:

●    文件的打开和关闭

●    文本文件的读取

●    存写ASCII数据

●    二进制数据的读取

●    二进制数据的存写

●    使用I/O文件函数进行数据读写

●    MAT文件的读写

2.1 文件的打开和关闭

2.1.1 文件的打开

无论是要读写ASCII码文件还是二进制文件,都必须先用fopen函数将其打开,在默认情况下,fopen以二进制格式打开文件,它的使用语法如下:

   fopen('filename','mode')

其中filename表示要读写的文件名称,mode则表示要对文件进行的处理方式,可以是表2-1中的任一字符串。

表2-1 文本文件打开的模式

mode

意   义

rt

以只读方式(Reading)打开文件

wt

以只写方式(Writing)打开文件

at

以追加方式(Appending)打开文件,新内容将从原文件后面续写

r+t

以同时读写方式打开文件

w+t

以同时读写创建文件,原文件内容被清除

a+t

以同时读和追加(ReadingandAppdending)方式,原文件内容被保留,新内容将从原文件的后面开始

At

以读写方式打开或创建文件,适用于对磁带介质文件的操作

Wt

以写入方式打开或创建文件,原文件内容被清除,适用于磁带介质文件的操作

fopen函数有两个返回值,一个是返回一个文件标志(fileIdentifier),它会作为参数被传入其他对文件进行读写操作的命令,通常是一个非负的整数,可用此标识来对此文件进行各种处理。

如果返回的文件标识是–1,则代表fopen无法打开文件,其原因可能是文件不存在,或是用户无法打开此文件权限。

另一个返回值就是message,用于返回无法打开文件的原因。

为了安全起见,最好在每次使用fopen函数时,都测试其返回值是否为有效值。

下面以脚本m文件为例来声明文件的打开。

例2-1 %exam1.m

[f,message]=fopen('fileexam1','r')

iff==-1

disp(message);  %显示错误信息

end

若文件fileexam1不存在,则显示如下信息。

Cannotopenfile.existence?

permissions?

memory?

...

例2-2 %exam2.m

[f,message]=fopen('fileexam2','r');

iff==-1

disp(message);   %显示错误信息

 else

   disp(f);

end

若文件fileexam2存在,则返回f值。

2.1.2 文件的关闭

一旦完成文件的读写,最好关闭文件,以便对其进行其他操作。

这时就可以使用fclose函数来关闭文件,其适用语法如下。

fclose(f)

其中f为打开文件的标志,若fclose函数返回值为0,则表示成功关闭f标志的文件;若返回值为–1,则表示无法成功关闭该文件。

一般来说,在完成对文件的读写操作后就应关闭它,以免造成系统资源浪费。

此外,需注意的是,打开和关闭文件都比较耗时,因此为了提高程序执行效率,最好不要在循环体内使用文件。

若要一次关闭打开的所有文件,可以使用下面的命令:

fcloseall

2.2 文本数据

虽然MATLAB自带的MAT文件为二进制文件,但为了便于和外部程序进行交换以及方便查看文件中的数据,也常常采用文本数据格式与外界进行数据交换。

在文本格式中,数据采用ASCII码格式,可以表示字母和数字字符。

ASCII文本数据可以在文本编辑器中查看和编辑。

MATLAB提供多种函数能够进行文件读写,这些函数都是MATLAB的一部分,不需要额外的工具箱支持。

2.2.1 从文本文件中读取数据

1.使用导入模板来读取数据

使用导入模板来读取数据,需按以下步骤进行:

(1)选择File→ImportData选项,然后弹出一个文件选择对话框;也可以使用uiimport函数来打开导入数据模板。

(2)在文件选择对话框中选择想导入数据的文本文件,然后单击Open按钮,导入数据模板就会打开该文件并准备处理其内容。

(3)指定用于分开单个数据的字符,该字符称为分隔符或列分隔符。

在多数情况下可以用导入模板来设定分隔符。

(4)选择要导入的变量。

在默认情况下,导入模板将所有的数值数据放在一个变量中,而将文本数据放在其他变量中。

(5)单击Finish按钮完成数据的导入。

当使用导入模板来打开一个文本文件时,在导入模板对话框的预览区仅显示原始数据的一部分,通过它,用户可以验证该文件中的数据是否为所期望的。

导入模板也根据文件中的数据分隔符来对导入的数据进行预处理。

在导入模板中打开工作区中的grade.txt文件。

   english math physic

joe              80   90     60

susan          78   98     88

rob             67   90     89

 

图2-1 将数据通过模板导入

 

在图2-1中,导入模板已辨认space字符,把它作为文件中数据的分隔符,并建立了两个变量:

data(包含文件中所有数值数据)和textdata(包含文件中所有文本数据)。

当导入模板正确导入文件中的数据后,就会显示它所建立的变量。

要选择一个变量来导入数据,可单击它名称后面的复选框。

在默认情况下,所有变量都会被选中。

在导入对话框的右面显示了导入模板建立的变量内容。

要查看其他变量,只需要单击该名称。

在选择好要导入的变量后,单击Next按钮,如图2-2所示。

 

图2-2 使用模板查看各变量数据

在默认情况下,导入模板将文件中所有的数值数据放在一个变量中;若文件包含文本数据,则模板将它们放在另外一个变量中;若文件包含行或列,模板也将它们作为各自独立的变量分别称为行头和列头。

当所有导入模板创建好数据后,使用whos命令可以查看工作空间的变量。

>>whos

 Name             Size           Bytes   Class    Attributes

 data                3x3            72       double             

 textdata              4x1            314     cell  

2.使用函数来读取文本数据

若要在命令行或在一个M文件中读取数据,必须使用MATLAB数据函数,函数的选择则是依据文本文件中数据的格式。

而且文本数据格式在行和列上必须采取一致的模式,并使用文本字符来分隔各个数据项,称该字符为分隔符或列分隔符。

分隔符可以是space、comma、semicolon、ab或其他字符,单个的数据可以是字母、数值字符或它们的混合形式。

文本文件也可以包含称之为头行的一行或多行文本,或可以使用文本头来标志各列或各行。

在了解要输入数据的格式之后,便可以使用MATLAB函数来读取数据了。

若对MATLAB函数不熟悉,可从表2-2中了解几个读取函数的一些使用特征。

表2-2 读取函数的比较

函   数

数据类型

分 隔 符

返 回 值

csvread

数值数据

仅cooma

1

dlmread

数值数据

任何字符

1

fscanf

字母和数值

任何字符

1

load

数值数据

仅space

1

textread

字母和数值

任何字符

多返回值

3.读取数值文本数据

若用户的数据文件只包含数值数据,则可以使用许多MATLAB函数,这取决于这些数据采用的分隔符。

若数据为矩形形状,也就是说,每行有同样数目的元素,这时可以使用最简单的命令load(load也能用于导入MAT文件,该文件为用于存储工作空间变量的二进制文件,如果文件名后缀是.dat,则MATLAB会以MAT文件格式进行读取)。

例如,文件my_data.txt包含了两行数据,各数据之间由space字符隔开。

当使用load时,它将读取数据并在工作空间中建立一个与该文件同名的变量,但不包括扩展名。

>>loadmy_data.txt;

调用whos命令查看工作空间的变量。

>>whos

 Name             Size           Bytes            Class    Attributes

 data                3x3             72              double             

 my_data             3x4             96               double             

 textdata              4x1             314            cell 

此时可以查看与该文件同名的变量的值

>>my_data

my_data=

   0.3242   0.4324   0.3455   0.6754

   0.4566   0.9368   0.9892   0.9274

   0.4658   0.2832   0.9373   0.8233

若想将工作空间的变量以该文件名命名,则可以使用函数形式的load,下面的语句将文件导入工作空间并赋给变量A

A=load('my_data.txt');

4.读取有分隔符的ASCII数据文件

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

最简单的便是使用函数dlmread。

举个例子来说,一个名为lcode.dat的数据文件,数据内容由逗号分隔。

0.3445,0.8433,0.7865

0.7562,0.4233,0

要把该文件的全部内容读入阵列A,只须输入如下命令:

>>A=dlmread('lcode.dat',',')

即可以把数据文件中使用的分隔符作为函数dlmread的第二个参数。

注意:

即使每行的最后一个数据后面不是逗号,dlmread函数仍能正确读取数据,因为dlmread忽略了数据之间的空格符。

因此,即使数据为如下格式,前面的dlmread命令仍能正常工作。

A=

   0.3445   0.8433   0.7865

   0.7562   0.4233        0

另外需要注意的是,分隔符只能选取单个字符,不能用字符串来作为分隔符。

5.使用文本头读取数值数据

要读取一个包含文本头的ASCII码数据文件,可以使用textread函数,并指定头行参数。

调用函数textread同样非常简单,同时对文件读取的格式处理能力更强,函数接收一组预先定义好的参数,由这些参数来控制变量的不同方面。

Textread既能处理有固定格式的文件,也可以处理无格式的文件,还可以对文件中每行数据按列逐个读取。

textread函数常见的调用方法有如下几种:

[A,B,C…]=textread('filename','format')

[A,B,C…]=textread('filename','format',N)

例如文件my_data.txt包含了如下文件内容,有一行文本头,且格式化的数值数据。

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命令来读取文件中的数据。

>>[num1num2num3num4]=textread('my_data.txt','%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

6.读取字母数值混合的数据

若数据文件中包含了字母和数值混合的ASCII码数据,也可以使用函数textread来读取数据。

由上一小节知道,函数textread可以返回多个输出变量,实际上用户还可以通过参数指定每个变量的数据类型。

例如要把文件my_exam.dat的全部内容读入工作空间,需要在textread行数的输入参数中指定数据文件的名称和格式。

文件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函数按格式字符串中指定的格式处理文件中的某个数据项,并把值放在输出变量中。

输出变量的数目必须和格式字符串中指定的变换数目项匹配,在该例中,函数按格式字符串来读取文件my_exam.dat的每一行,直到文件读完,该命令的执行结果是:

name=

   'Joe'

   'susan'

gra=

   'gradeA'

   'gradeD'

grades=

   4.9000

   2.0000

answer=

   'pass'

   'fail

另外,textread函数可以有选择地读取数据,比如我们不需要取出中间几列数据,只取出第一列和最后一列数据,则可以使用命令:

>>[name  answer]=textread('my_exam.dat','%s%*s%*f%s')

name=

   'Joe'

   'susan'

answer=

   'pass'

   'fail'

若文件采用的分隔符不是空格,则必须使用函数textread,将该分隔符作为它的参数。

例如,若文件my_exam.dat使用分号作为分隔符,则读入该文件需使用如下命令:

[name gra grades ans]=textread('my_exam.dat','%s%s%f%s','delimiter',';')

2.2.2 存写ASCII码数据

本小节介绍如何使用MATLAB函数按几种通用的ASCII码格式来存写数据,即如何使用这些函数来把一个MATLAB数值矩阵写入到一个文本文件中,其中该矩阵的列和行使用空格符来分隔。

用户采用什么函数取决于所要存写数据的数据量和数据格式。

常用的两种ASCII码数据格式如下:

●    采用空格符分隔;

●    采用分号分隔。

MATLAB的存写数据函数如表2-3所示。

表2-3 数据存写函数

函数名称

适用数据

分 隔 符

csvwrite

数值数据

逗号

diary

数值数据或单元阵列

空格

dlmwrite

数值数据

任何字符

fprintf

字母和数值数据

任何字符

save

数值数据

制表符或空格符

1.存写有分隔符的ASCII码数据文件

若要将当前的MATLAB工作空间的一个或多个变量写到一个有分隔符的ASCII码文件中,可以使用save命令或dlmwrite函数。

在默认情况下,save命令是以MAT格式存写数据的,这部分内容我们在后面详细介绍,本小节主要介绍save命令通过ASCII码限定符以文本方式存写数据。

而dlmwrite函数则可以提供更大的灵活性,它允许用户把任何字符指定为分隔符,也可以通过指定一个值域存写一个阵列的子阵列。

>>clearall;

>>x=rand(2,3);

>>savemy_test1.datx–ascii;

该命令将变量x中的数据存写到my_test1.dat文件中。

通过文本编辑器,我们可以查看该文件的内容:

 9.2181297e-001 1.7626614e-001 9.3546970e-001

 7.3820725e-001 4.0570621e-001 9.1690444e-001

我们也可以将命令中的文件名和变量名省略,那样的话,命令的执行结果则是把当前MATLAB工作空间中的所有变量保存到matlab.mat文件中。

需要指明的是这时的文件虽然后缀名为.mat,但文件内容仍然是以文本方式保存的。

在默认情况下,save命令使用空格作为分隔符,但用户可以通过指定-tabs限定符来使用制表符而不是空格符作为分隔符。

当使用save命令把一个字符阵列写入ASCII文件时,将ASCII码写入文件也就等于把字符写入文件。

若要以ASCII码形式存写一个阵列,并指定文件使用的分隔符,需要使用dlmwrite函数,比如重新指定分号作为分隔符,把变量x存到文件my_test2.dat文件中,查看其结果:

0.92181;0.17627;0.93547

0.73821;0.40571;0.9169

在默认情况下,dlmwrite函数用逗号或空格作为分隔符,或者是指定空的引号,即无分隔符。

2.使用diary命令来存写数据

较小的数值阵列或单元阵列的存写可以使用diary命令,例如,在工作空间中有一个阵列A:

A=[12345;678910]

在命令提示符下执行如下命令:

diarymy_test3.dat,就可以创建my_test3.dat文件。

接下来显示要存写的阵列A:

A=

    1    2    3    4    5

    6    7    8    9   10

然后执行关闭diary命令:

diaryoff。

这时,在文本编辑器中打开my_test3.dat文件,会发现diary命令创建的文件记录了在MATLAB会话期间的所有命令。

可以通过编辑,删去无关的文本

2.3 二进制数据

2.3.1 二进制数据的读取

本小节将介绍怎样将一般格式下的二进制数据文件读取到工作空间中。

读取二进制数据常用的方法有两种,一是使用导入模板来导入,二是使用二进制数据导入函数来读取。

1.使用导入模板读取二进制数据

要使用导入模板来读取二进制数据,需按以下步骤进行:

(1)选择File→ImportData选项,弹出一个文件选择对话框;也可以使用uiimport函数来打开导入数据模板。

(2)在文件选择对话框中选择想导入数据的二进制数据文件,然后单击Open按钮,导入数据模板就会打开该文件并准备处理其内容。

(3)选择要导入的变量。

在默认情况下,导入模板将要建立的变量取决于文件中的数据类型。

(4)单击Finish按钮完成数据的导入。

这个过程和使用导入模板读取文本文件是基本一致的,这里就不再举例了。

2.使用导入函数读取二进制数据

若要从命令行或一个M文件中读取二进制数据,就必须使用MATLAB导入函数,函数的选择取决于文件中数据的格式,这些函数如表2-4所示。

表2-4 导入二进制数据函数

函数名称

读取文件的扩展名

数据格式

load

.mat

读取MATLAB下的MAT数据格式的数据

aviread

.avi

读取AVI格式的音频视频数据

cdfread

.cdf

读取CDF格式的数据

hdf

.hdf

读取HDF格式的数据

imread

.bmp .cur .gif .hdf .ico

.jpg .pbm .pgm .png .pnm 

.ppm .pcx .tif .xwd .ras

读取各种格式的图形数据

wavread

.wav

读取Windows系统的声音文件

xlsread

.xls

读取Excel电子表格数据

2.3.2 二进制数据的存写

要以一种标准二进制格式来存写二进制数据,可以使用MATLAB提供的高端函数,函数的选择取决于要存写数据的类型,这些函数如表2-5所示。

表2-5 导出二进制数据函数

函数名称

读取文件的扩展名

数据格式

save

.mat

存写MATLAB下的MAT数据格式的数据

avifile

.avi

存写AVI格式的音频视频数据

cdfwrite

.cdf

存写CDF格式的数据

hdf

.hdf

存写HDF格式的数据

imwrite

.bmp .cur .gif .hdf .ico

.jpg .pbm .pgm .png .pnm 

.ppm .pcx .tif .xwd .ras

存写各种格式的图形数据

wavwrite

.wav

存写Windows系统的声音文件

xlswrite

.xls

存写Excel电子表格数据

在MATLAB中可以将一系列的图像保存为电影,这样使用电影播放函数就可以进行回放,保存方法可以同保存其他MATLAB工作空间变量一样,通过采用MAT文件格式保存。

但是若要浏览该电影,必须在MATLAB环境下。

在以某种格式存写一系列的MATLAB图像时,不需要在MATLBA环境下进行预览,通常采用的格式为AVI格式。

AVI是一种文件格式,在PC机上的Windows系统或UNIX操作系统下可以进行动画或视频的播放。

若要以AVI格式来存写MATLAB图像,步骤如下:

(1)用avifile函数建立一个AVI文件。

(2)用addframe函数来捕捉图像并保存到AVI文件中。

(3)使用close函数关闭AVI文件。

注意:

若要将一个已经存在的MATLAB电影文件转换为AVI文件,需使用函数movie2avi。

函数原型为:

movie2avi(mov,filename)

movie2avi(mov,filename,param,value,param,value…)

2.4 使用文件I/O函数

前面介绍的都是MATL

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2