MATLAB:如何读取文本文件的每第N行?

时间:2011-04-03 17:06:00

标签: matlab text file-io textscan

我有一些数据格式如下:

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);

有什么想法吗? 干杯!

2 个答案:

答案 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