有些時候,我們需要用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'