我有一些数据格式如下:
dtau E_av variance N_sims Time
0.001 0.497951 0.000211625 25 Sun Apr 3 18:18:12 2011
dtau E_av variance N_sims Time
0.002 0.506784 0.000173414 25 Sun Apr 3 18:18:58 2011
现在我想使用textscan将每第三行的前4列(除了时间之外)读入MATLAB;在使用fid = fopen('data.text')
之后,我基本上必须循环这个:
results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);
有什么想法吗? 干杯!
答案 0 :(得分:2)
fid = fopen('data.text')
while ~feof(fid)
results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);
//Processing...
for i = 1:2
fgets(fid)
end
end
fgets
读取直到行尾,并返回该行上的文本。所以,只需调用它两次就可以跳过两行(丢弃函数的返回值)。
答案 1 :(得分:0)
因为您知道您将有5个列标签(即字符串),后跟4个数字值,后跟5个字符串(例如'Sun'
,'Apr'
,'3'
,'18:18:12'
,和'2011'
),您实际上可以将所有数字数据读入一个N×4矩阵,只需一次调用TEXTSCAN:
fid = fopen('data.text','r'); %# Open the file
results = textscan(fid,[repmat(' %*s',1,5) ... %# Read 5 strings, ignoring them
'%f %f %f %f' ... %# Read 4 numeric values
repmat(' %*s',1,5)],... %# Read 5 strings, ignoring them
'Whitespace',' \b\t\n\r',... %# Add \n and \r as whitespace
'CollectOutput',true); %# Collect numeric values
fclose(fid); %# Close the file
results = results{1}; %# Remove contents of cell array