Matlab讀入含有特殊分隔符的文件(textread)


筆者在此基礎上進行運行,修改得到以下內容,希望大家給與補充:

textread

基本語法是:

    [A,B,C,…] = textread(filename,format)

    [A,B,C,…] = textread(filename,format,N)
其中filename就是文件名, format就是要讀取的格式,A,B,C就是從文件中讀取到的數據。
必須嚴格遵守用法不可出現data=textread(filename,format,N)的形式

其中括號里面變量的個數必須和format中定義的個數相同。 如果每N行相同格式的數據,可采用[A,B,C,…] = textread(filename,format,N)的語法,讀取N次。
_______________________________________________________________________________________

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

________________________________________________________________________________________

例如:
.....................................................................................
例1:無分隔符
mytest.txt
 1     2     3     4
 5     6     7     8
 9    10    11    12

讀取:
>>[data1,data2,data3,data4]=textread('mytest.txt','%n%n%n%n');
>>data=[data1 data2 data3 data4]
data =

     1     2     3     4
     5     6     7     8
     9    10    11    12
或者,[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);%注意3為讀取次數,應該是行數
....................................................................................

例2:有分隔符(逗號,分號...)
myfile.txt 中的內容如下:

    1, 2, 3, 4

    5, 6, 7, 8

    9, 10, 11, 12

讀取:
>> [data1,data2,data3,data4]=textread('myfile.txt','%n%n%n%n','delimiter', ',')
>> data=[data1 data2 data3 data4]

data =

     1     2     3     4
     5     6     7     8
     9    10    11    12
這里delimiter是指 指出分隔符,讀數據的時候會自動跳過分隔符。

至此應該知道Iris.txt怎么讀入了吧。
[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');

需要注意的是,參數位置要和textread函數用法對應
[A,B,C,…] = textread(filename,format,N)也就是filename,format,N三個參數必須在其他參數前面,所以150才會出現在format后
例如:[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s',150,'delimiter',',');
..............................................................................

例3:有分隔符及首行注釋
myfiles.txt 中的內容如下:

    % this a comment

    1, 2, 3, 4

    5, 6, 7, 8

    9, 10, 11, 12

>> [data1,data2,data3,data4]=textread('myfiles.txt','%n%n%n%n','delimiter', ',','headerlines', 1);
>>  data=[data1 data2 data3 data4]

data =

     1     2     3     4
     5     6     7     8
     9    10    11    12
textread中的headerlines指明了跳過幾行,1可自由設定
這里headerlines告訴textread跳過一開始的1行,1可以替換為任意你要跳過的行數。
..............................................................................

例4:針對txt文件不同格式數據的讀取

myfile.txt 中的內容如下:

    Sally Level1 12.34 45 Yes

讀入:
[names, types, x, y, answer] = textread('myfileli4.txt' , '%s %s %f %d %s', 1);

對應格式[A,B,C,…] = textread(filename,format,N)
_________________________________________________________________________________

   例4.1: 如果要忽略12.34這個浮點數。

    [names, types, y, answer] = textread('myfileli4.txt' , '%s %s %*f %d %s', 1)

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

    'Sally'


types =

    'Level1'


y =

    45


answer =

    'Yes'

對於iris.txt如果只想讀取數據可用[data1,data2,data3,data4]=textread('Iris.txt','%f %f %f %f %*s',150,'delimiter',',');
____________________________________________________________________________________________

 例:4.2  如果要忽略Level,指讀取后面的數字,

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

names =

    'Sally'


levelnum =

     1


x =

   12.3400


y =

    45


answer =

    'Yes'
________________________________________________________________________________________________
..............................................................OK ...............................................
例5: txt中存在空位

myfileli5.txt 中的內容如下
    1,2,3,4,,6

    7,8,9,,11,12

    想用nan替代為空的部分

如下:
>>[data1 data2 data3 data4 data5 data6] = textread('myfileli5.txt','%f%f%f%f%f%f', 'delimiter', ',', 'emptyvalue', NaN)

>> data=[data1 data2 data3 data4 data5 data6];
>> data

data =

     1     2     3     4   NaN     6
     7     8     9   NaN    11    12

....................................................................................................................

例6: 跳列

myfileli6.txt 中的內容如下

    Sally Type1 12.34 45 Yes

    Joe Type2 23.54 60 No

    Bill Type1 34.90 12 No

如果只想讀第一列,其余的跳過

讀入:
>> clear
>> [names]=textread('myfileli6.txt','%s%*[^\n]');
>> names

names =

    'Sally'
    'Joe'
    'Bill'

%[^\n] 就是一直讀到行尾。
如:
>> [names rest]=textread('myfileli6.txt','%s%[^\n]')

names =

    'Sally'
    'Joe'
    'Bill'


rest =

    'Type1 12.34 45 Yes'
    'Type2 23.54 60 No'
    'Type1 34.90 12 No'

%*[^\n] 就是從當前直接跳到行尾。
% *是一個跳過符號,表示跳過該位

....................................................................................

例7:讀入規律格式的數據

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

讀入:
[location year month day hour minute discharge]=textread('myfileli7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';');

如下:
>> clear
>> [location year month day hour minute discharge]=textread('myfileli7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';')

location =

    'Lobith'
    'Lobith'


year =

        1989
        1989


month =

     1
     1


day =

     1
     2


hour =

     0
     0


minute =

     0
     0


discharge =

        2801
        2619

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM