0
假設我有上百個線,如下面一行:閱讀在Matlab中的文本文件未指定列數
名姓Grade1 Grade2 Grade3
這看起來很容易獲得從文本將此數據與
[firstName,lastName,grade1,grade2,grade2] = textread(fileName,'%s %s %f %f %f');
但是,如果有些學生有第二個名字,我該如何防止這種結構?
假設我有上百個線,如下面一行:閱讀在Matlab中的文本文件未指定列數
名姓Grade1 Grade2 Grade3
這看起來很容易獲得從文本將此數據與
[firstName,lastName,grade1,grade2,grade2] = textread(fileName,'%s %s %f %f %f');
但是,如果有些學生有第二個名字,我該如何防止這種結構?
如果您可以確定第二個名稱是數據結構的唯一可變部分,那麼您可以逐行讀取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
它在while循環,gracias中工作得非常好! – mduden
我可能會讀完整的原始行,分割空間,然後檢查結果向量的長度。如果它長於5列,則假定您必須合併其中的兩個。當然,這假設只有一個名稱字段可以有第二個名字。如果沒有,你有點擰。如果你真的想解決它,你應該使用更好的分隔符來輸出它 – excaza