天天看點

matlab讀取任意格式的文本檔案

有些時候,我們需要用matlab讀取自定義格式的文本檔案。比如有這樣一個資料 families.txt:

Bob,32,father;Alice,31,mother;Mike,4,son;Jonh,7,son
Dick,30,father;Judy,30,mother;Sophia,6,daughter
           

這個文本資料統計了兩個家庭的成員,每一行代表一個家庭,家庭的成員用 分号(;) 隔開,每個成員包含了名字、年齡和角色資訊,用逗号(,)隔開。因為每個家庭的成員是不一樣多的,是以每一行的資料也不一樣多。

解析這個格式的思路如下:

1. 利用 fgetl 函數擷取一行文本;

2. 利用 strsplit 函數分割字元串;

3. 将資料儲存到結構體中,還可以用 num2str 将年齡轉換為數字。

fid = fopen('families.txt');
tline = fgetl(fid);
families = [];
family_count = 0;
while tline ~= -1
    strs = strsplit(tline, ';');              % 成員之間用分号分割
    num = length(strs);
    members = [];
    for i = 1:num
        memberStr = strsplit(strs{i}, ',');   % 成員資訊用逗号分割
        member.name = memberStr{1};
        member.age = memberStr{2};
        member.role = memberStr{3};
        members{i} = member;
    end
    
    family_count = family_count + 1;
    families{family_count} = members;
end
           

這樣,所有成員的資訊被讀入一個families的cell數組中

families =

  1×2 cell 數組

    {1×4 cell}    {1×4 cell}


families{1} =

  1×4 cell 數組

    {1×1 struct}    {1×1 struct}    {1×1 struct}    {1×1 struct}


families{1}{1} = 

  包含以下字段的 struct:

    name: 'Bob'
     age: '32'
    role: 'father'
           

繼續閱讀