如何在MATLAB中导入大型文本文件

问题描述

| 我的文件一个标头,每个col的标头,然后是cols。我对仅将第4列的数据提取到MATLAB变量中感兴趣。 我遇到了一些问题。一种是大约有300万个单元格,当我使用导入向导时,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);
    

解决方法

这是使用TEXTSCAN的一种解决方案:
fid = fopen(\'scan1.dat\',\'r\');
dataCell = textscan(fid,\'%*s %*s %*f %*f %f\',\'HeaderLines\',6);
fclose(fid);
使用
\'HeaderLines\'
参数忽略前6行,将日期和时间读取为字符串并忽略(比将它们读取为整数并忽略它们更紧凑),并且忽略浮点数据的前两列。 ѭ6的内容将是数据的最后一列。