1. 程式人生 > >Matlab讀取txt檔案中的資料(使用textread函式)

Matlab讀取txt檔案中的資料(使用textread函式)

在使用Matlab處理資料時,我們經常需要讀取txt文件,可以使用Matlab中強大的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) 

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

%*f告訴textread跳過一個浮點數。

    ②如果要忽略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讀取這個檔案時,還是會從檔案頭開始讀取。