2014-01-21 81 views
0

我有一个ASCII文件,它有固定宽度的列(所有行都是68个字符 - 字节 - 长)。在MATLAB中逐行读取大文本文件

我在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); 
+0

你应该发布你使用的代码。 – aganders3

+0

不确定你的问题到底是什么,但如果你想知道为什么在处理4GB而不是4.1GB后停止,可能是因为你没有考虑回车和/或换行符。 – Charles

+0

或者它在30.9GB文件上也停在4GB? – Charles

回答

1

但是这是真的很难,没有任何进一步的信息说,但我觉得你是保存分开地比较两行,这意味着你有一个数组的结果这会增加尺寸直到达到您的记忆限制。 (我会评论这一点,但由于我的名誉是不够的,我不得不张贴它作为答案)