逐行读取MATLAB中的大文本文件

时间:2014-01-21 16:57:52

标签: matlab large-files

我有一个ASCII文件,它有固定宽度的列(所有行都是68个字符 - 字节 - 长)。

我在MATLAB中编写了典型的while循环来逐行读取文件。我想要做的就是将一行与前一行进行比较,因此我使用fgetlsscanf来提取我需要的内容。当fgetl的结果不是字符串(~ischar)时,循环会中断。

在两个文件(4.1 GB和30.9 GB)上测试后,我发现当读取4 GB时,循环会完全停止(行数乘以68字节)。

这是在Windows 7 x64上运行的MATLAB r2012b x64。是什么给了什么?

编辑:

实际代码:

fid = fopen('hugefile.txt', 'r');
oldtime = -1;
counter = 0;
timejumps = [];
while 1
  line = fgetl(fid);
  if ~ischar(line), break, end
  counter = counter+1;
  %progress indicator
  if mod(counter, 100000) == 0, fprintf('At line %d...\n', counter); end
  A = sscanf(line, '%d %*f %d %*d %*d %*f %*f');
  newtime = A(1)+A(2)/1000;
  if newtime < oldtime
    fprintf(1, 'Illegal time jump from %f to %f at line %d.\n', ...
      oldtime, newtime, counter);
    timejumps = [timejumps; counter, oldtime, newtime];
  end
  oldtime = newtime;
end
fclose(fid);

1 个答案:

答案 0 :(得分:1)

然而,如果没有任何进一步的信息很难说,但我认为你正在保存分别比较两行的结果,这意味着你有一个增加大小的数组,直到达到你的内存限制。 (我会对此发表评论,但由于我的声誉不够,我必须将其作为答案发布)