2016-05-12 85 views
0

假設我有上百個線,如下面一行:閱讀在Matlab中的文本文件未指定列數

名姓Grade1 Grade2 Grade3

這看起來很容易獲得從文本將此數據與

[firstName,lastName,grade1,grade2,grade2] = textread(fileName,'%s %s %f %f %f'); 

但是,如果有些學生有第二個名字,我該如何防止這種結構?

+2

我可能會讀完整的原始行,分割空間,然後檢查結果向量的長度。如果它長於5列,則假定您必須合併其中的兩個。當然,這假設只有一個名稱字段可以有第二個名字。如果沒有,你有點擰。如果你真的想解決它,你應該使用更好的分隔符來輸出它 – excaza

回答

0

如果您可以確定第二個名稱是數據結構的唯一可變部分,那麼您可以逐行讀取fgetl()並在決定解析方法之前計算逗號的數量。這是一個例子。你會把整個塊放在一個循環中。希望你沒有大量的數據解析。

a = 'John, Smith, 95, 85, 71'; 
% inline = fgetl(fid); 

if length(strfind(a,',')) == 4 
    c = textscan(a,'%s %s %f %f %f', 'Delimiter',','); 
    first_name = c{1}{1} 
    last_name = c{2}{1} 
    grades = cell2mat(c(3:5)) 

elseif length(strfind(a,',')) == 3 
    c = textscan(a,'%s %f %f %f', 'Delimiter',','); 
    first_name = c{1}{1} 
    grades = cell2mat(c(2:4)) 
end 
+0

它在while循環,gracias中工作得非常好! – mduden