1. 程式人生 > >Matlab textread函式詳解

Matlab textread函式詳解

轉載來自:http://blog.sina.com.cn/s/blog_618af1950100k926.html

實際應用中經常要讀取txt檔案,這個時候就需要用到強大的textread函式。 它的基本語法是:

[A,B,C,...] = textread(filename,format) [A,B,C,...] = textread(filename,format,N) 其中filename就是檔名, format就是要讀取的格式,A,B,C就是從檔案中讀取到的資料。 中括號裡面變數的個數必須和format中定義的個數相同。 如果每N行相同格式的資料,可採用[A,B,C,...] = textread(filename,format,N)的語法,讀取N次。

舉例如下: 例子1:myfile.txt 中的內容如下: 1 2 3 4 5 6 7 8 9 10 11 12 相應的語句為: filename = '.\myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n'); 或者為 filename = '.\myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);

例子2:myfile.txt 中的內容如下: 1, 2, 3, 4 5, 6, 7, 8 9, 10, 11, 12 相應的語句為: filename = '.\myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ','); 這裡delimiter指出分隔符,讀資料的時候會自動跳過分隔符。

例子3:myfile.txt 中的內容如下: % this a comment 1, 2, 3, 4 5, 6, 7, 8 9, 10, 11, 12 相應的語句為: filename = '.\myfile.txt'; [data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1); 這裡告訴textread跳過一開始的1行,1可以替換為任意你要跳過的行數。

例子4:myfile.txt 中的內容如下:

Sally Level1 12.34 45 Yes

相應語句為:

filename = '.\myfile.txt';

[names, types, x, y, answer] = textread(filename , '%s %s %f %d %s', 1)
4.1如果要忽略12.34這個浮點數。
[names, types, y, answer] = textread(filename , '%s %s %*f %d %s', 1) 

%*f 告訴textread跳過一個浮點數。 4.2 如果要忽略Level,指讀取後面的數字,

[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1)


例子5:myfile.txt 中的內容如下
1,2,3,4,,6 
7,8,9,,11,12

想用nan替代為空的部分。
語句如下:
data = textread('myfile.txt', 'delimiter', ',', 'emptyvalue', NaN);


例子6: myfile.txt 中的內容如下  
 Sally    Type1 12.34 45 Yes
 Joe      Type2 23.54 60 No
 Bill     Type1 34.90 12 No

如果只想讀第一列,其餘的跳過
filename = '.\myfile.txt';
[names]=textread(filename,'%s%*[^\n]')

 %[^...] - reads characters not matching characters between the brackets until first matching character  
%[^\n] 就是一直讀到行尾。
%*[^\n] 就是從當前直接跳到行尾。 
可對比
[names,rest]=textread(filename,'%s%[^\n]') 


例子7: myfile.txt 中的內容如下                  
Location;date;discharge 
Lobith;1989-01-01;00:00;2801
Lobith;1989-01-02;00:00;2619

語法如下:
[Location,... % 1
    yyyy              ,... % 2a datestring year
    mm                ,... % 2b datestring month
    dd                ,... % 2c datestring day
    HH                ,... % 3a timestring hour
    MM                ,... % 3b timestring minute
    discharge] =  ...
    textread(filename,'%s%f-%f-%f%f:%f%f',...
        'headerlines',1,...
        'delimiter'  ,';');

注意:

textread不用先fopen那個檔案,適用於格式統一的txt檔案的一次性大批量讀取。textread讀取某個檔案後,下次再用textread讀取這個檔案時,還是會從檔案頭開始讀取。