matlab基本教程8第⼋章输⼊/输出函数 (3)
8.1 函数textread (3)
8.2 关于load和save命令的进⼀步说明 (4) 8.3 MATLAB⽂件过程简介 (5)
8.4 ⽂件的打开与关闭 (6)
8.4.1 fopen函数 (6)
8.4.2 fclose函数 (8)
8.5 ⼆进制I/O函数 (8)
8.5.1 fwrite函数 (8)
8.5.2 fread函数 (9)
例8.1 读写⼆进制数据 (9)
测试8.1 (11)
8.6 格式化I/O函数 (11)
8.6.1 fprint函数 (11)
8.6.2 格式转换指定符的理解 (12)
8.6.3 如何使⽤格式字符串 (14)
例8.2 产⽣⼀个信息表 (15)
8.6.4 fscanf函数 (16)
8.6.5 fgetl函数 (17)
8.7 格式化和⼆进制I/O函数的⽐较 (17)
例8.3 格式化和⼆进制I/O⽂件的⽐较 (18)测试8.2 (20)
8.8 ⽂件位置和状态函数 (21)
8.8.1 exist函数 (21)
例8.4 打开⼀个输出⽂件 (21)
8.8.2 函数ferror (23)
8.8.3 函数foef (23)
8.9 函数uiimport (27)
8.10 总结 (29)
8.10.1 好的编程习惯总结 (29)
8.10.2 MATLAB总结 (30)
8.11 练习 (30)
8.1 (30)
8.2 (30)
8.6 (31)fprintf格式
8.7 (31)
8.8 (31)
8.9 (32)
8.10 (32)
8.11 (32)
8.12 (32)
8.13 (32)
第⼋章输⼊/输出函数
在第⼆章中,我们已经学到如何⽤load和save命令加载和保存MATLAB数据,以及如何使⽤fprintf函数格式化输出数据。在本章中,我们将学习更多的关于MATLAB输⼊和输出的功能。⾸先,我们将会学习函数textread,在maltab5。3中它是⼀个⾮常有⽤的函数。然后,我们将花更多的时间学习load和save命令。最后,我们将查看其他的MATLAB I/O 选择。
熟悉C语⾔的读者对这部分数据将会⼗分的熟悉。但是,在MATLAB函数和c函数之间有细微的不同。
8.1 函数textread
命令textread最早出现于MATLAB5.3中。它可以按列读取ascii⽂件中的元素,每⼀列中可能含有不同的数据类型。这函数读取其他程序⽣成的数据表时⾮常地有⽤。
这个命令的形式如下
[a, b, c, ...] = textread(filename, format, n)
其中filename代表要打开的⽂件的名字,format是⽤于每⼀⾏数据类型的字符串,n代表要读取的⾏数(如果没有n,则这个命令将读完这个⽂件)。格式化字符串与函数fprintf格式化描述的字符串相同。注意输出参数的个数必须与你读取的列数相区配。
例如,假设⽂件test_input.dat包含下列数据
James Jones O+ 3.51 22 Yes
Sally Smith A+ 3.28 23 NO
这些数据⽤下⾯的函数读取⼀系列的数组。
[first, last, blood, gpa, age, answer] = textread('test_input.dat','%s %s %s %f %d %s')
'James'
'Sally'
last =
'Jones'
'Smith'
blood =
'O+'
'A+'
age =
22
23
answer =
'Yes'
'NO'
这个函数可以通过在格式描述符前⾯加⼀个星号的⽅式来跳过某些所选项。例如,下⾯的语句只从⽂件只读取first,last和gpa。
>> [first, last, gpa] = textread('test_input.dat','%s %s %*s %f %*d %*s')
first =
'James'
'Sally'
last =
'Jones'
'Smith'
gpa =
3.5100
3.2800
函数textread要⽐load命令简单有效的多。load命令假设输⼊⽂件中的所有数据都是同⼀类型——它不⽀持在不同的列上有不同的数据。此外,它把所有的数据都存储在⼀个数据中。相反地,函数textread允许每⼀列都有独⽴的变量,当和由不同类型的数据组成的列运算时,它更加的⽅便。
函数textread中有许许多多参数,它们增加了函数的灵活性。你可通过咨询MATLAB 的在线⽂本得到这些参数的使⽤细节。
常见编程错误
应⽤函数text从ascii⽂件中按⾏格式读取数据,这个ascii⽂件可能是其他语⾔⽣成的,或是由其他的应⽤程序⽣成的,例如表格。
8.2 关于load和save命令的进⼀步说明
save命令把MATLAB⼯作区数据存储到硬盘,load命令把硬盘上的数据拷贝到⼯作区中。save命令即可⽤特殊的⼆进制格式mat-file存储数据,也可⽤普通的ascii码格式存储数据。save命令的形式为
save filename [list of variables] [options]
如果只有save命令,那么当前⼯作区内的所有数据存储在⼀个名为matlab.mat的⽂件中。如果后⾯有⼀个⽂件名,那么这些数据将会存储在“filename.mat”的⽂件。如果后⾯还包括⼀系列的变量,那么就只存储这些特殊的变量。
⽀持save命令的参数如表8.1所⽰。
表8.1save命令的参数
参数描述
-mat 以mat⽂件格式存储数据(默认)
-ascii ⽤ascii格式保存数据
-append 给已存在matf⽂件增加变量
-v4 也存储为mat⽂件格式,但能被MATLAB4.0读取
load命令可以加载mat⽂件或普通的ascii⽂件中的数据。load命令的形式如下
load filename [option]
如果只有load命令,MATLAB将加载matlab.mat⽂件中的所有数据。如果还跟着⼀个⽂件名,它load命令将会加载这个⽂件中的数据。
⽀持load命令的参数被列于表8.1中。
尽管它们的优点不是⼗分的明显,但是save和load命令是MATLAB中功能最强⼤,最有⽤的I/O命令。它的优点是
1. 这些命令易于使⽤
2. mat⽂件的平台独⽴。在⼀个⽀持MATLAB的计算机上编写的⽂件,在另⼀种⽀持MATLAB的计算机
上,可以被读取。这种格式可以在PC,Mac,许多不同版本的Unix 上互相转换。
3. mat⽂件⾼效的硬盘空间使⽤者,它存储数据是⾼精度的,在mat⽂件和ascii⽂件转化过程中会出现精度下降的情况。
4. mat⽂件存储了⼯作区内的每⼀个变量的所有信息,包括它的类属,名字和它是不是全局变量。在I/O其他类型数据存储格式中所有的这些信息都会丢失。例如,假设⼯作区
包含下⾯信息。
>> whos
Name Size Bytes Class
array
(global)
a 10x10 800 double
ans 1x1 8 double array
array
b 10x10 800 double
c 2x2 332 cell array
string 1x16 32 char array
array student 1x3 2152 struct
Grand total is 372 elements using 4124 bytes
如果⼯作区⽤save workspace.mat命令存储,那么⽂件workspace.mat就会被⾃动创建。当这个⽂件被加载时,⼯作区中的所有信息都会被恢复,包括每⼀项的类型和⼀变量是否为全局变量。
这个命令的缺点是⽣成的mat⽂件只能由MATLAB调⽤,其他的程序不可能利⽤他共享数据。如要你想要与其他程序共享数据,可以应⽤-ascii参数,但它有诸多的限制。
表8.2 load命令参数
参数描述
-mat 把⽂件当作mat⽂件看待(如果扩展名是mat,此为默认格式)
好的编程习惯
除⾮我们必须与⾮MATLAB程序进⾏数据交换,存储和加载⽂件时,都应⽤mat⽂件格式。这种格式是⾼效的且移植性强,它
保存了所有MATLAB数据类型的细节。
save -ascii根本不能存储单元阵列和结构数据,在保存字符串之前,它要把字符串转化相应的数字形式。load -ascii命令只能加载空间独⽴的数据,这些数据每⼀⾏的元素个数都相等,MATLAB把所有的数据都存储于⼀个变量中,这个变量与输出⽂件同名。如果你要⽤更⾼的要求(例如,保存和加载字符串,单元阵列或结构数组并与其它程序进⾏交换),那么你需要本章后⾯介绍的I/O命令。
如果我们要加载的⽂件名或变量名是字符串,那么我们要⽤这些命令的函数形式。例如,下⾯的代码段要求⽤户提供⼀个⽂件名,并把当前⼯作区保存在那个⽂件中。
filename = input('Enter save file name: ','s');
save(filename);
8.3 MATLAB⽂件过程简介
为了使⽤在MATLAB程序中的⽂件我们需要⼀些⽅法选出我们所要的⽂件,并从中读取或写⼊数据。在MATLAB中有⼀种⾮常灵活的读取/写⼊⽂件的⽅法,不管这个⽂件是在磁盘还是在磁带上或者是其他的存储介质。这种机制就叫做⽂件标识(file id)(有时可简写为fid),当⽂件被打开,读取,写⼊或操作时,⽂件标识是赋值于⼀个⽂件的数。⽂件标识是⼀个正整数。两种⽂件标识是公开的——⽂件标识1是标准输出机制,⽂件标识2是标准错误机制(stderr)。其他的⽂件标识,在⽂件打开时创⽴,⽂件关闭时消逝。
许多的MATLAB语句可以控制磁盘⽂件的输⼊或输出。⽂件I/O函数被总结在表8.3中。
表8.3 MATLAB输⼊/输出语句
类别函数描述
load 加载⼯作区
加载/保存⼯作区
save 保存⼯作区
⽂件打开/关闭fopen 打开⽂件
fclose 关闭⽂件
fread 从⽂件中读取⼆进制数据
⼆进制I/O
fwrite 把⼆进制数据写⼊⽂件
fscanf 从⽂件中读取格式化数据
格式化I/O
fprintf 把格式化数据写⼊⽂件
fgetl 读取⽂件的⼀⾏,忽略换⾏符
fgets 读取⽂件的⼀⾏,不忽略换⾏符
delete 删除⽂件
⽂件位置、状态
exist 检查⽂件是否存在
ferror 所需⽂件的I/O错误情况
feof 检测⽂件的结尾
fseek 设置⽂件的位置
ftell 检查⽂件的位置
frewind 回溯⽂件

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