MATLAB: как прочитать каждую N-ую строку текстового файла? - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть некоторые данные, которые отформатированы следующим образом:

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

Теперь я хочу прочитать первые 4 столбца (все, кроме времени) каждой третьей строки в MATLAB, используя текстовое сканирование;после использования fid = fopen('data.text'), я в основном должен зациклить это:

results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);

Есть идеи?Ура!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011
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 читает до конца строки и возвращает текст в этой строке.Итак, просто вызовите его дважды, чтобы пропустить две строки (исключая возвращаемое значение функции).

0 голосов
/ 04 апреля 2011

Поскольку вы знаете, что у вас будет 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
...