Как я могу импортировать мой большой текстовый файл в MATLAB - PullRequest
2 голосов
/ 13 апреля 2011

У моего файла есть заголовок и заголовок каждого столбца, а затем столбцов.Я заинтересован в извлечении данных из 4-го столбца в переменную MATLAB.

Я столкнулся с несколькими проблемами.Один из них состоит в том, что в нем около 3 миллионов ячеек, и MATLAB по какой-то причине усекает его, когда я использую мастер импорта (он усекает файл до 191 686 строк).*

Channels:   1  
Count:  3600000  
Start:  40640.854055    04/07/11 16:29:50  
End:    40640.895721    04/07/11   17:29:50                                                                            

Date    Time    Time Stamp  Time from Start EEG 1_8401  
04/07/11           16:29:50        40640.687388    0.000000        3.854626e+001     
04/07/11           16:29:50        40640.687388    0.001000        2.664706e+001     
04/07/11           16:29:50        40640.687388    0.002000        1.425481e+001     
04/07/11           16:29:50        40640.687388    0.003000        1.704369e+000     
04/07/11           16:29:50        40640.687388    0.004000        -1.070827e+001   
04/07/11           16:29:50        40640.687388    0.005000        -2.290569e+001   

Вот скрипт, который я использовал для импорта файла, когда он был усечен:

function importfile(fileToRead1)

DELIMITER = '\t';
HEADERLINES = 6;

% Import the file
newData1 = importdata(fileToRead1, DELIMITER, HEADERLINES);

vars = fieldnames(newData1);
for i = 1:length(vars)
     assignin('base', vars{i}, newData1.(vars{i}));
end

Я думал сделать что-то подобное с textscan, но не уверен, какпропустите заголовки и продолжайте получать ошибки переполнения буфера:

fid = fopen('scan1.dat');
C = textscan(fid, '%*d/%*d/%*d %*d:%*d:%*d %*f %*f %f')
fclose(fid);

1 Ответ

1 голос
/ 13 апреля 2011

Вот одно решение с использованием TEXTSCAN :

fid = fopen('scan1.dat','r');
dataCell = textscan(fid,'%*s %*s %*f %*f %f','HeaderLines',6);
fclose(fid);

Первые 6 строк игнорируются с помощью параметра 'HeaderLines', дата и время считываются как строки и игнорируются (немногоболее компактно, чем чтение их как целых чисел и игнорирование их), а первые два столбца данных с плавающей запятой игнорируются.Содержимое dataCell{1} будет последним столбцом ваших данных.

...