如何在MATLAB中导入我的大文本文件

时间:2011-04-13 15:17:37

标签: regex matlab file-io import

我的文件有一个标题和每个col的标题,然后是cols。我有兴趣将第4列中的数据提取到MATLAB变量中。

我遇到了一些问题。一个是大约有300万个单元格,当我使用导入向导(它将文件截断为191,686行)时,MATLAB因某些原因而截断它。

以下是该文件的前几行:

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

答案 0 :(得分:1)

以下是使用TEXTSCAN的一个解决方案:

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

使用'HeaderLines'参数忽略前6行,将日期和时间作为字符串读取并忽略(比将它们作为整数读取并忽略它们更紧凑),以及前两列浮动点数据被忽略。 dataCell{1}的内容将是您数据的最后一列。