VBA以相反的顺序逐行读取大文本文件

时间:2013-04-02 05:38:37

标签: algorithm vba excel-vba excel

VBA问题

有一个大的日志文件(大约500,000行),我需要以相反的顺序逐行读取它,即从最后一行到第一行。 我知道我可以在Microsoft Scripting Runtime引用中使用FileSystemObject,但是没有像TextStream中的ReadLine方法的 reverse 这样的选项

现在,我能想到的唯一方法是这样,有一个计数器并跳过我读过的每一行的前一行,但是这肯定不够好。任何建议代码/算法将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果您的日志是一种带有允许确定顺序的字段的数据库(是否有日期字段或行号字段),如果是这样,您可以尝试使用带有SQL查询的ADO解决方案以相反的顺序读取日志(ORDER BY ... DESC)。所以,你将能够从上到下阅读。或者通常 - 尝试使用ADO。

答案 1 :(得分:1)

文件不是基于行的,甚至是基于字符的,它只是字节,因此无法在文件中以相反的顺序读取行。文本如何分成行只取决于文本中的换行符。

您可以从头开始读取行并将它们存储在旋转缓冲区中,这样当您到达文件末尾时就会有缓冲区中的最后1000行。这样,您就可以从缓冲区访问一定数量的行,而无需为每一行读取整个文件。

之后您知道文件中有多少行,因此当您需要重新填充缓冲区时,您可以跳过一定数量的行并将以下行读入缓冲区。