小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Matlab實(shí)現(xiàn)文件讀寫的幾種方法

 樂山樂水8 2010-06-10
Matlab有著強(qiáng)大的數(shù)據(jù)處理功能,經(jīng)常需要從外部文件讀取數(shù)據(jù)或?qū)?shù)據(jù)寫到外部文件。Matlab和外部文件進(jìn)行數(shù)據(jù)交換相關(guān)的命令,個(gè)人目前了解到的有以下幾種。
 
(1)Load
load 從Matlab的數(shù)據(jù)文件.mat中讀取變量數(shù)據(jù),也可以從.txt .dat等文件中讀取數(shù)據(jù)。使用load命令讀取數(shù)據(jù)以后在Matlab中數(shù)據(jù)變量和文件同名。例如使用“load data.txt”后數(shù)據(jù)變量名即為data。
需要注意的是文件格式的不同,文件格式分為二進(jìn)制格式和ASCII格式兩種。如果是二進(jìn)制格式的文件,可以使用load命令直接讀取。但如果是ASCII格式的文件,需要保證數(shù)據(jù)是整齊的(每一行數(shù)據(jù)個(gè)數(shù)要一致),否則會(huì)出錯(cuò)。
 
例:
data.txt文件(ASCII格式)
0 1
1 2 3
0
使用“load data.txt”將會(huì)出錯(cuò)。
 
data1.txt文件
0 1 2
1 2 3
2 3 4
使用“load data1.txt”能順利讀入3*3矩陣。
 
 
和load相對應(yīng)的寫數(shù)據(jù)命令為save,一般存為.mat文件,save保存的文件格式為二進(jìn)制格式。
 
二進(jìn)制和ASCII的區(qū)別
從文件編碼的方式來看,文件可分為ASCII碼文件和二進(jìn)制碼文件兩種。
ASCII文件也稱為文本文件,這種文件在磁盤中存放時(shí)每個(gè)字符對應(yīng)一個(gè)字節(jié),用于存放對應(yīng)的ASCII碼。例如,數(shù)5678的存儲(chǔ)形式為:
ASC碼:00110101(5)   00110110(6)   00110111(7) 00111000(8) 共占用4個(gè)字節(jié)。ASCII碼文件可在屏幕上按字符顯示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可顯示文件的內(nèi)容。由于是按字符顯示,因此能讀懂文件內(nèi)容。

二進(jìn)制文件是按二進(jìn)制的編碼方式來存放文件的。例如,數(shù)5678的存儲(chǔ)形式為:00010110 00101110 (十進(jìn)制5678轉(zhuǎn)換成二進(jìn)制)只占二個(gè)字節(jié)。二進(jìn)制文件雖然也可在屏幕上顯示,但其內(nèi)容無法讀懂。C系統(tǒng)在處理這些文件時(shí),并不區(qū)分類型,都看成是字符流,按字節(jié)進(jìn)行處理。輸入輸出字符流的開始和結(jié)束只由程序控制而不受物理符號(如回車符)的控制。因此也把這種文件稱作“流式文件”。
 
(2)importdata
importdata根據(jù)文件名將數(shù)據(jù)導(dǎo)入到Matlab工作區(qū)。可以導(dǎo)入文件類型有很多,.txt .wav 等等。導(dǎo)入的數(shù)據(jù)(包括字符串和數(shù)值)以結(jié)構(gòu)形式存放在工作區(qū),可以使用whos命令來查看工作區(qū)的數(shù)據(jù)。
importdata可以導(dǎo)入load不能讀取的長短不一的ASCII文件。當(dāng)文件中既包含字符串又包含數(shù)值,而且數(shù)值長度個(gè)數(shù)不一時(shí),可以使用importdata命令。注意讀取的數(shù)值矩陣列數(shù)以文件中數(shù)值第一行的列數(shù)為標(biāo)準(zhǔn)。
 
例 test.txt
This is a test.
Start
0 1 2
1 2
1 2 3 4
運(yùn)行A=importdata('test.txt')
結(jié)果:
A =
        data: [4x3 double]
    textdata: {2x1 cell}
 
A.data =
     0     1     2
     1     2   NaN
     1     2     3
     4   NaN   NaN
 
A.textdata =
    'This is a test.'
    'Start'
 
另外,讀取的字符串只能位于數(shù)值之前,位于數(shù)值之后的將被忽略。
 
例:test.txt
0 1 2
1 2
1 2 3 4
End.
運(yùn)行A=importdata('test.txt')
結(jié)果:
A =
     0     1     2
     1     2   NaN
     1     2     3
     4   NaN   NaN
 
 
除了importdata命令以外,還可以從菜單選項(xiàng)file-->import data...導(dǎo)入數(shù)據(jù)文件,效果和importdata命令一樣。
 
(3)fopen
fopen打開一個(gè)文件并創(chuàng)建文件標(biāo)識(shí)以供接下來的讀寫等操作。fopen命令本身不進(jìn)行讀操作。然后可以使用fscanf讀取數(shù)據(jù),根據(jù)需要對數(shù)據(jù)進(jìn)行篩選編輯。
 
例:讀取字符串的方法
data.txt
0 1 2
1 2 3
1 2 3
End.
 
fid=fopen('data.txt');    %打開文件,創(chuàng)建文件標(biāo)識(shí)
A=fscanf(A,'%c');         %讀取數(shù)據(jù)
fclose(fid);              %關(guān)閉文件標(biāo)識(shí)
i=findstr(A,'End');       %查找標(biāo)識(shí)
B=A(1:i-3);               %提取數(shù)據(jù),換行為2個(gè)字符
C=str2num(B);             %將數(shù)據(jù)轉(zhuǎn)換成數(shù)值矩陣
 
結(jié)果:
A =
0 1 2
 
1 2 3
 
1 2 3
 
注意其中str2num同樣需要保證數(shù)值矩陣中列數(shù)一致,如果不一致,則結(jié)果為空。
 
0 1 2
1 2
1 2 3
End.
 
結(jié)果C=[]
 
 
例:讀取行的方法
fid1=fopen('data.txt');
fid2=fopen('numbers.txt','w');
while ~feof(fid1)
    aline=fgetl(fid1);
    if double(aline(1))>=48&&double(aline(1))<=57
        fprintf(fid2,'%s\n',aline);
        continue
    end
end
fclose(fid1);
fclose(fid2);
 
numbers.txt即為按行保存的數(shù)值文件

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多