matlab文件操作fopen-fseek-fread-fclose等_第1頁
matlab文件操作fopen-fseek-fread-fclose等_第2頁
matlab文件操作fopen-fseek-fread-fclose等_第3頁
matlab文件操作fopen-fseek-fread-fclose等_第4頁
matlab文件操作fopen-fseek-fread-fclose等_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、文件操作是一種重要的輸入輸出方式,即從數(shù)據(jù)文件讀取數(shù)據(jù)或?qū)⒔Y(jié)果寫入數(shù)據(jù)文件。MATLAB提供了一系列低層輸入輸出函數(shù),專門用于文件操作。1、文件的打開與關(guān)閉 1)打開文件在讀寫文件之前,必須先用fopen函數(shù)打開或創(chuàng)建文件,并指定對(duì)該文件進(jìn)行的操作方式。fopen函數(shù)的調(diào)用格式為:fid=fopen(文件名,打開方式)說明:其中fid用于存儲(chǔ)文件句柄值,如果返回的句柄值大于0,則說明文件打開成功。文件名用字符串形式,表示待打開的數(shù)據(jù)文件。常見的打開方式如下: r:只讀方式打開文件(默認(rèn)的方式),該文件必須已存在。l r+:讀寫方式打開文件,打開后先讀后寫。該文件必須已存在。l w:打

2、開后寫入數(shù)據(jù)。該文件已存在則更新;不存在則創(chuàng)建。l w+:讀寫方式打開文件。先讀后寫。該文件已存在則更新;不存在則創(chuàng)建。l a:在打開的文件末端添加數(shù)據(jù)。文件不存在則創(chuàng)建。l a+:打開文件后,先讀入數(shù)據(jù)再添加數(shù)據(jù)。文件不存在則創(chuàng)建。l另外,在這些字符串后添加一個(gè)“t”,如rt或wt+,則將該文件以文本方式打開;如果添加的是“b”,則以二進(jìn)制格式打開,這也是fopen函數(shù)默認(rèn)的打開方式。2)關(guān)閉文件文件在進(jìn)行完讀、寫等操作后,應(yīng)及時(shí)關(guān)閉,以免數(shù)據(jù)丟失。關(guān)閉文件用fclose函數(shù),調(diào)用格式為:stafclose(fid)說明:該函數(shù)關(guān)閉fid所表示的文件。sta表示關(guān)閉文件操作的返回代碼,若關(guān)閉

3、成功,返回0,否則返回-1。如果要關(guān)閉所有已打開的文件用fclose(all)。 2、二進(jìn)制文件的讀寫操作1)寫二進(jìn)制文件fwrite函數(shù)按照指定的數(shù)據(jù)精度將矩陣中的元素寫入到文件中。其調(diào)用格式為:COUNTfwrite(fid,A,precision)說明:其中COUNT返回所寫的數(shù)據(jù)元素個(gè)數(shù)(可缺?。?,fid為文件句柄,A用來存放寫入文件的數(shù)據(jù),precision代表數(shù)據(jù)精度,常用的數(shù)據(jù)精度有:char、uchar、int、long、float、double等。缺省數(shù)據(jù)精度為uchar,即無符號(hào)字符格式。例6.8 將一個(gè)二進(jìn)制矩陣存入磁盤文件中。>> a=1 2 3

4、4 5 6 7 8 9;>> fid=fopen('d:test.bin','wb') %以二進(jìn)制數(shù)據(jù)寫入方式打開文件fid =       3 %其值大于0,表示打開成功>> fwrite(fid,a,'double')ans =      9 %表示寫入了9個(gè)數(shù)據(jù)>> fclose(fid)ans =       0 %表示關(guān)閉成

5、功2)讀二進(jìn)制文件fread函數(shù)可以讀取二進(jìn)制文件的數(shù)據(jù),并將數(shù)據(jù)存入矩陣。其調(diào)用格式為:A,COUNT=fread(fid,size,precision)說明:其中A是用于存放讀取數(shù)據(jù)的矩陣、COUNT是返回所讀取的數(shù)據(jù)元素個(gè)數(shù)、fid為文件句柄、size為可選項(xiàng),若不選用則讀取整個(gè)文件內(nèi)容;若選用則它的值可以是下列值:N(讀取N個(gè)元素到一個(gè)列向量)、inf(讀取整個(gè)文件)、M,N(讀數(shù)據(jù)到M×N的矩陣中,數(shù)據(jù)按列存放)。 precision用于控制所寫數(shù)據(jù)的精度,其形式與fwrite函數(shù)相同。 3、文本文件的讀寫操作1)讀文本文件fscanf函數(shù)可以讀取文本文件的內(nèi)容,

6、并按指定格式存入矩陣。其調(diào)用格式為:A,COUNT=fscanf(fid,format,size)說明:其中A用來存放讀取的數(shù)據(jù),COUNT返回所讀取的數(shù)據(jù)元素個(gè)數(shù),fid為文件句柄,format用來控制讀取的數(shù)據(jù)格式,由%加上格式符組成,常見的格式符有:d(整型)、f(浮點(diǎn)型)、s(字符串型)、c(字符型)等,在%與格式符之間還可以插入附加格式說明符,如數(shù)據(jù)寬度說明等。size為可選項(xiàng),決定矩陣A中數(shù)據(jù)的排列形式,它可以取下列值:N(讀取N個(gè)元素到一個(gè)列向量)、inf(讀取整個(gè)文件)、M,N(讀數(shù)據(jù)到M×N的矩陣中,數(shù)據(jù)按列存放)。 matlab中的fscanf的用法如下

7、:A=fscanf(fid,format)A, count=fscanf(fid,format,size) A, count=fscanf(fid,format,size)個(gè)人感覺用的最多的是這樣的形式:data = fscanf(fid,format,size);其中data為讀取內(nèi)容的數(shù)組,它的大小由size決定。size是一個(gè)m n的向量,m為行,n為列(注意,這里讀取的順序是按列優(yōu)先排列的,不明白的話可以看下面的例子),若n取inf表示讀到文件末尾。fid為fopen打開文件的返回值,format是格式化參數(shù)(像printf、scanf)。舉個(gè)小例子:路徑+文件名:d:moo

8、n.txt內(nèi)容:13,1,3.4   3,2.1,23          1, 12, 2   4,5.4,6現(xiàn)在為了讀取moon.txt中的數(shù)據(jù)存在一個(gè)數(shù)組里,可以用如下方法:fid=fopen('d:moon.txt');data=fscanf(fid,'%f,%f,%f',3,inf) ;%這里得用單引號(hào)fclose(fid);這時(shí)data中的數(shù)據(jù)如下:(3行4列,matlab元素按照列的順序排列)13    3    

9、; 1       41     2.1   12     5.44     23     2      6 通常我們可能需要用引用數(shù)組中的某行或某列來畫圖,方法是data(m,:) 或者 data(:,n),即取得data數(shù)組的第m行或第n列。   2)寫文本文件fprintf

10、函數(shù)可以將數(shù)據(jù)按指定格式寫入到文本文件中。其調(diào)用格式為:fprintf(fid,format,A)說明:fid為文件句柄,指定要寫入數(shù)據(jù)的文件,format是用來控制所寫數(shù)據(jù)格式的格式符,與fscanf函數(shù)相同,A是用來存放數(shù)據(jù)的矩陣。例6.9 創(chuàng)建一個(gè)字符矩陣并存入磁盤,再讀出賦值給另一個(gè)矩陣。>> a='string'>> fid=fopen('d:char1.txt','w');>> fprintf(fid,'%s',a);>> fclose(fid);>> fid

11、1=fopen('d:char1.txt','rt');>> b=fscanf(fid1,'%s')b =      stringmatlab讀txt文件fid=fopen('fx.txt','r');%得到文件號(hào)f,count=fscanf(fid,'%f %f',12,90);%把文件號(hào)1的數(shù)據(jù)讀到f中。其中f是12 90的矩陣%這里'%f %f'表示讀取數(shù)據(jù)的形式,按原始數(shù)據(jù)型讀出fclose(fid);%關(guān)閉文件&

12、#160;另外有的txt文件還可以用load來打開其語句為f=load('fx.txt)我個(gè)人覺得用第一種方式較好。因?yàn)橛行r(shí)候,特別是fx.txt 的一行種有多個(gè)數(shù)據(jù)時(shí)用load就比較麻煩了。 4.數(shù)據(jù)文件定位MATLAB提供了與文件定位操作有關(guān)的函數(shù)fseek和ftell。fseek函數(shù)用于定位文件位置指針,其調(diào)用格式為:status=fseek(fid, offset, origin)其中fid為文件句柄,offset表示位置指針相對(duì)移動(dòng)的字節(jié)數(shù),OFFSET values are interpreted as follows:> 0  

13、60; Move toward the end of the file.= 0    Do not change position.< 0    Move toward the beginning of the file.origin表示位置指針移動(dòng)的參照位置,ORIGIN values are interpreted as follows:'bof' or -1  Beginning of file'cof' or 0   Current position

14、 in file'eof' or 1   End of file。若定位成功,status返回值為0,否則返回值為1。 ftell函數(shù)返回文件指針的當(dāng)前位置,其調(diào)用格式為:position=ftell (fid)返回值為從文件開始到指針當(dāng)前位置的字節(jié)數(shù)。若返回值為1表示獲取文件當(dāng)前位置失敗。例:FID=fopen('sw.m','r')fseek(FID,10,-1)ans =     0>> ftell(FID)ans =    10

15、>> fseek(FID,-10,1)ans =     0>> ftell(FID)ans =        2180文件指針可以移動(dòng)到當(dāng)前文件末尾的后面,但不能移動(dòng)到開頭的前面;當(dāng)把指針移動(dòng)到文件末尾后面時(shí),若關(guān)閉文件則文件大小會(huì)自動(dòng)增長到文件指針?biāo)傅拇笮。眠@種方法可以很容易創(chuàng)建一個(gè)很大的文件,當(dāng)然新增加的文件內(nèi)容是隨機(jī)的。 【附錄:matlab讀取grd格式文件的源代碼】clc;clear all;close all;fid=fopen(&#

16、39;C:Zhenghui_CodetestDLLtestForDLLkms04ssh-egm96u.grd','r'); head=fread(fid,4,'uint8=>char')' %讀取文件頭DSAAfscanf(fid,'n'); nx=fscanf(fid,'%d',1);%讀取格網(wǎng)數(shù)據(jù)的行數(shù)nnx,列數(shù)nnzfp=fseek(fid,1,0);    %1表示讀取文件指針向后偏移1位,0表示指針移動(dòng)參考當(dāng)前位置ny=fscanf(fid,

17、9;%d',1);fscanf(fid,'n'); xmin=fscanf(fid,'%f',1);%讀取x的最小值和最大值fseek(fid,4,1);         %4表示讀取文件指針向后偏移4位,1表示指針移動(dòng)參考位置為文件結(jié)尾xmax=fscanf(fid,'%f',1);fscanf(fid,'n'); ymin=fscanf(fid,'%f',1);%讀取y的最小值和最大值fseek(fid,4,1);ymax=fscanf(fid,'%f',1);fscanf(fid,'n'); zmin=fscanf(fid,'%f',1);%讀取z的最小值和最大值fseek(fid,4,1);zmax=fscanf(fid,'%f',1);fscanf(fid,'n');   for i=1:ny   %注意matlab是按照列的順序來存放數(shù)據(jù)的,先存第1列,然后第2列,依次到

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論