我有一个ASCII文件,它有固定宽度的列(所有行都是68个字符 - 字节 - 长)。
我在MATLAB中编写了典型的while循环来逐行读取文件。我想要做的就是将一行与前一行进行比较,因此我使用fgetl
和sscanf
来提取我需要的内容。当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);
答案 0 :(得分:1)
然而,如果没有任何进一步的信息很难说,但我认为你正在保存分别比较两行的结果,这意味着你有一个增加大小的数组,直到达到你的内存限制。 (我会对此发表评论,但由于我的声誉不够,我必须将其作为答案发布)