您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 综合/其它 > 第四讲MATLAB文件操作
2020/3/41第四讲MATLAB文件操作Matlab文件输入、输出(I/O)函数允许把其它格式的数据文件直接读进matlab.它是以C语言文件I/O函数为基础的。2020/3/422020/3/42文件数据格式有两种形式,一是二进制文件,二是文本文件。在打开文件时需要进一步指定文件格式类型,即指定是二进制文件还是文本文件。4.1文件的打开与关闭2020/3/432020/3/434.1.1文件的打开fopen函数的调用格式为:fid=fopen(文件名,打开方式)其中,文件名用字符串形式,表示待打开的数据文件。常见的打开方式有:‘r’表示对打开的文件读出数据,‘w’表示对打开的文件写入数据,‘a’表示在打开的文件末尾添加数据。若文件没有,先创建一个空文件。fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。fid=fopen('std.dat','r')2020/3/44打开文件使用fopen打开文件:fid=fopen('Ex0805.txt',‘r')%打开文件读写fid=3fid=fopen('Ex0805',‘r')fid=fopen('Ex0805.txt',‘w')fid=fopen('Ex0805',‘w')注意:把文件所在路径必须设为当前路径r:只读方式打开文件(默认的方式),该文件必须已存在。r+:读写方式打开文件,打开后先读后写。该文件必须已存在2020/3/45w:打开后写入数据。该文件已存在则更新;不存在则创建。w+:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。a:在打开的文件末端添加数据。文件不存在则创建。a+:打开文件后,先读入数据再添加数据。文件不存在则创建。另外,在这些字符串后添加一个“t”:如,“rt”或“wt”,则将该文件以文本方式打开;•如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。2020/3/462020/3/46文件在进行完读出、写入等操作后,应及时关闭,以保证文件的安全可靠。关闭文件用fclose函数,格式为:sta=fclose(fid)该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1。4.1.2文件的关闭2020/3/47关闭文件使用fclose关闭文件:fid=fopen('Ex0805','w')%打开文件读写fid=3fid=fopen('Ex0805',‘r')sta=fclose(fid)%关闭文件sta=02020/3/482020/3/484.2文件的读写操作4.2.1二进制文件的读写操作1.读二进制文件fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:[A,COUNT]=fread(fid,size,precision)其中A用于存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,2020/3/492020/3/49size为可选项,若不选用,则读取整个文件内容,若选用,则它的值可以是下列值:(1)N:表示读取N个元素到一个列向量。(2)Inf:表示读取整个文件。(3)[M,N]:表示读数据到M×N的矩阵中,数据按列存放。precision代表读写数据的类型fid=fopen('std.dat','r');[A,COUNT]=fread(fid,3,‘long’);sta=fclose(fid)2020/3/4102020/3/4102.写二进制文件fwrite函数按照指定的数据类型将矩阵中的元素写入到文件中。和fread相反。其调用格式为:COUNT=fwrite(fid,A,precision)其中,COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。2020/3/411例:建立一数据文件test.dat,用于存放矩阵A的数据A=[-0.6515-0.2727-0.4354-0.3190-0.9047-0.7534-0.4567-0.3212-0.4132-0.3583-0.9264-0.8173-0.7823-0.3265-0.0631-0.1735-0.7373-0.0972-0.3267-0.6298-0.4768-0.6773-0.6574-0.1923-0.4389]Fid=fopen(‘test.dat’,‘w’)cnt=fwrite(Fid,A,‘float’)%把矩阵A写入文件fclose(Fid)程序段将矩阵A的数据以二进制浮点数格式写入文件test.dat中。Fid=fopen(‘test.dat’,‘r’)[B,cnt]=fread(Fid,[5,5],‘float’)fclose(Fid)读取文件test.dat的内容。2020/3/4122020/3/4124.2.2文本文件的读写操作1.读文本文件fscanf函数的调用格式为:(类似fread)[A,COUNT]=fscanf(fid,format,size)其中,A用以存放读取的数据,COUNT返回所读取的数据元素个数。fid为文件句柄。format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,s。size为可选项,决定矩阵A中数据的排列形式。例如:s=fscanf(fid,‘%s’)读取一个字符串a=fscanf(fid,‘%5d’)读取5位数的整数b=fscanf(fid,‘%6.2d’)读取浮点数比较:[A,COUNT]=fread(fid,size,precision)二进制2020/3/4132020/3/4132.写文本文件fprintf函数的调用格式为:COUNT=fprintf(fid,format,A)其中,A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件。格式符与fscanf函数相同。即Afid比较:COUNT=fwrite(fid,A,precision)二进制,precision数据类型2020/3/414例:建立一数据文本文件txt.dat,用于存放矩阵A的数据A=[-0.6515-0.2727-0.4354-0.3190-0.9047-0.7534-0.4567-0.3212-0.4132-0.3583-0.9264-0.8173-0.7823-0.3265-0.0631-0.1735-0.7373-0.0972-0.3267-0.6298-0.4768-0.6773-0.6574-0.1923-0.4389]Fid=fopen('txt.dat’,'w')COUNT=fprintf(Fid,'%f%f%f%f%f\n',A)为何用5个%f呢?fclose(Fid)程序段将矩阵A的数据以二进制浮点数格式写入文件txt.dat中。Fid=fopen(‘txt.dat’,‘r’)[A,COUNT]=fscanf(Fid,'%f',[55])fclose(Fid)读取文件txt.dat的内容。2020/3/415[A,COUNT]=fscanf(Fid,'%f',[55])A=-0.6515-0.2727-0.4354-0.3190-0.9047-0.7534-0.4567-0.3212-0.4132-0.3583-0.9264-0.8173-0.7823-0.3265-0.0631-0.1735-0.7373-0.0972-0.3267-0.6298-0.4768-0.6773-0.6574-0.1923-0.4389矩阵中的数据是按列排列的。存储的时候也是按列排列。硬盘中‘txt.dat’的内容:Matlab读入后A的内容:2020/3/416•计算当x=[01]时f(x)=exp(x)的值,并将结果写入到文件my.txt中。程序x=0:0.1:1;•y=[x;exp(x)];%y有两行数据fid=fopen('E:\my.txt','w');fprintf(fid,‘%6.2f%12.8f\n’,y);%把y数据写入到fidfclose(fid);typeE:\my.txt2020/3/417•这是浮点数输出格式,如:%6.2f表示无论结果有多少位,输出结果至少占六个制表符,即六个位置,不够的用空格补满,可以超过,且保留两位小数位。同理,%12.8f占十二个位置,八位小数。•%d整数•%e实数:科学计算法形式•%f实数:小数形式•%g由系统自动选取上述两种格式之一•%s输出字符串2020/3/4184.3读写格式化文件•4.3.1fgetl和fgetsfgetl和fgets命令都是用来读取文件的下一行,两者的差别是fgetl会舍去换行符,而fgets则保留换行符。语法:tline=fgetl(fid)%读取文件的下一行,不包括换行符tline=fgets(fid)%读取文件的下一行,包括换行符tline=fgets(fid,nchar)%限制读取文件字符个数说明:fid为文件句柄;tline为以字符串形式的返回值,如果到文件末尾则返回-1;nchar为最多返回的字符个数。2020/3/419读写格式化文件【例】以行的形式读取Ex0805.txt文件。建立一文本文件Ex0805.txt(可利用记事本,写字板,word等)typeEx0805.txta123b456Thisisaexample.fid=fopen(‘Ex0805.txt’,‘r’);%打开Ex0803.txt文件只读fgetl(fid)•ans=a123fgets(fid)•ans=•b456%体会有何区别呢?fgets(fid,10)%读取第三行数据,限制10个字符ans=%Thisisafgets(fid,10)ans=example.2020/3/420•读写格式化文件•4.3.2textread[A,B,C,...]=textread(filename,format)•[A,B,C,...]=textread(filename,format,N)•其中filename就是文件名,format就是要读取的格式,A,B,C就是从文件中读取到的数据。•注意:中括号里面变量的个数必须和format中定义的个数相同。textread(filename,format,N)的语法,读取N次。•typeE:\my.txt•?•[a1a2]=textread('E:\my.txt','%s%f')•?•这样文件my.txt中的每列分别读入变量a1、a2。2020/3/421•myfile.txt中的内容如下:•1234•5678•9101112•相应的语句为:•[data1,data2,data3,data4]=textread('myfile.txt','%n%n%n%n');2020/3/422•若有数据文件my_data.txt•num1num2num3num4•0.32420.43240.34550.6754•0.45660.93680.98920.9274•0.46580.28320.93730.8233[num1num2num3num4]=textread('my_data.txt','%f%f%f%f','headerlines',1)•执行结果:num1=•0.3242•0.4566•0.4658•num2=•0.4324•0.9368•0.2832num3=0.34550.98920.9373num4=0.67540.92740.82332020/3/423若数据文件中包含了字母和数值混合的二进制数据,也可以使用函数textread来读取数据。JoegradeA4.9passsusangradeD2.0fail[namegragradesanswer]=textread('my_exam.dat','%s%s%f%s')name='Joe''susan'gra='gradeA''gradeD'grades
本文标题:第四讲MATLAB文件操作
链接地址:https://www.777doc.com/doc-4148340 .html