不能使用LoadFromFile,因为文本文件非常大,上百M(几十万行),而我可能只要其中的几百行。要利用缓冲,并可以指定缓冲区大小。谢谢!

解决方案 »

  1.   

    几十万行?上百兆?我弄得无序文本,200万也不过20兆而已。如果真得很大,那就读一些写一些了。用TStrings来操作。关键是,你得把问题说的详细清楚,要不你得到的答案也是笼统地。
      

  2.   

    呵呵,谢谢,是我表述不清楚。我要读取Web日志,每行的长度不固定,行数也不固定,我看了一个,18万行就20多M了。现在我要把第150000到第160000行读到内存,应该用什么函数呢,文件名当然是知道,如果用TStrings,要首先LoadFromFile,那还是一下子把该文件读到内存了。如果用TFileStream等Stream类型,这些函数和逻辑行似乎没有什么联系,我是否应该首先BlockRead,计算每行的地址呢?说的更具体点,我现在需要这样一个函数GetLines(SrcFile, StartLine, EndLine, DestFile). 它把SrcFile的从StartLine到EndLine存入DestFile,其所占用的最大内存与SrcFile的大小无关。
      

  3.   

    其实你看了LoadFromStream的代码就知道了,所谓的分行其实就是判断#13#10之后再去分行。仍旧是内存占用量的问题,不可能不经过内存,关键是你所能承受的内存占用量的底线。分批地进行搬运分割。