我的文件有一个标题和每个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);
答案 0 :(得分:1)
以下是使用TEXTSCAN的一个解决方案:
fid = fopen('scan1.dat','r');
dataCell = textscan(fid,'%*s %*s %*f %*f %f','HeaderLines',6);
fclose(fid);
使用'HeaderLines'
参数忽略前6行,将日期和时间作为字符串读取并忽略(比将它们作为整数读取并忽略它们更紧凑),以及前两列浮动点数据被忽略。 dataCell{1}
的内容将是您数据的最后一列。