如何利用缓冲区拷贝一个大文本文件的指定行数到另外一个文件。

时间:2022-08-04 21:00:59
不能使用LoadFromFile,因为文本文件非常大,上百M(几十万行),而我可能只要其中的几百行。要利用缓冲,并可以指定缓冲区大小。

谢谢!

6 个解决方案

#1


学习

#2


谢谢,顶一下!

#3


几十万行?上百兆?我弄得无序文本,200万也不过20兆而已。

如果真得很大,那就读一些写一些了。用TStrings来操作。

关键是,你得把问题说的详细清楚,要不你得到的答案也是笼统地。

#4


呵呵,谢谢,是我表述不清楚。

我要读取Web日志,每行的长度不固定,行数也不固定,我看了一个,18万行就20多M了。

现在我要把第150000到第160000行读到内存,应该用什么函数呢,文件名当然是知道,如果用TStrings,要首先LoadFromFile,那还是一下子把该文件读到内存了。如果用TFileStream等Stream类型,这些函数和逻辑行似乎没有什么联系,我是否应该首先BlockRead,计算每行的地址呢?

说的更具体点,我现在需要这样一个函数GetLines(SrcFile, StartLine, EndLine, DestFile). 它把SrcFile的从StartLine到EndLine存入DestFile,其所占用的最大内存与SrcFile的大小无关。

#5


没人回答Up一下!

#6


其实你看了LoadFromStream的代码就知道了,

所谓的分行其实就是判断#13#10之后再去分行。

仍旧是内存占用量的问题,不可能不经过内存,

关键是你所能承受的内存占用量的底线。

分批地进行搬运分割。

#1


学习

#2


谢谢,顶一下!

#3


几十万行?上百兆?我弄得无序文本,200万也不过20兆而已。

如果真得很大,那就读一些写一些了。用TStrings来操作。

关键是,你得把问题说的详细清楚,要不你得到的答案也是笼统地。

#4


呵呵,谢谢,是我表述不清楚。

我要读取Web日志,每行的长度不固定,行数也不固定,我看了一个,18万行就20多M了。

现在我要把第150000到第160000行读到内存,应该用什么函数呢,文件名当然是知道,如果用TStrings,要首先LoadFromFile,那还是一下子把该文件读到内存了。如果用TFileStream等Stream类型,这些函数和逻辑行似乎没有什么联系,我是否应该首先BlockRead,计算每行的地址呢?

说的更具体点,我现在需要这样一个函数GetLines(SrcFile, StartLine, EndLine, DestFile). 它把SrcFile的从StartLine到EndLine存入DestFile,其所占用的最大内存与SrcFile的大小无关。

#5


没人回答Up一下!

#6


其实你看了LoadFromStream的代码就知道了,

所谓的分行其实就是判断#13#10之后再去分行。

仍旧是内存占用量的问题,不可能不经过内存,

关键是你所能承受的内存占用量的底线。

分批地进行搬运分割。