2013-04-02 65 views
5

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

有一个大的日志文件(约50万线),我需要通过以相反的顺序逐行阅读,即从最后行到第一行。 我知道我可以在Microsoft脚本运行时参考使用FileSystemObject的,但像反向没有这样的选项ReadLine方法在文本流现在

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

+0

你能告诉我们的日志文件的格式和数据的几行?另外,请告诉我们您将如何使用反向数据,你就会把它变成另一个文件,或MS Excel的工作簿2007+ 。是否有像LogID一样的KeyColumn? –

+1

这样一个大文件的最佳选择是使用ADO和OLE DB文本文件驱动程序。请参阅[MSDN:许多ADO关于文本文件](http://msdn.microsoft.com/en-us/library/ms974559.aspx),您将使用ORDER BY * Key列名查询数据* DESC –

回答

3

如果你的日志与现场一样的数据库,它允许以确定的顺序(是否有日期字段或行号字段),如果是的话,你可以尝试使用ADO解决方案与SQL查询来读取日志反向顺序(ORDER BY ... DESC)。所以,你将能够从头到尾阅读。或者通常 - 尝试使用ADO。

+1

+1,使用带有ORDER BY的ADO,并参见[MSDN:关于文本文件的许多ADO](http://msdn.microsoft.com/zh-cn/library /ms974559.aspx) –

+0

文本文件和ADO http://msdn.microsoft.com/en-us/library/ms974559.aspx –

+0

THX的家伙,这实在是一个不错的方法,但意识到我不能读取行之后线反向加上日志的每一行都没有标准化,我找出一个“算法”来做到这一点,而不需要反向读取。再次感谢您的投入! –

1

的文件不是基于行的,甚至是基于字符的,它只是字节,因此没有办法读取以相反的顺序行的文件。文本如何分隔成行只是由文本中换行符的位置决定的。

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

之后,你知道有多少行有在该文件中,所以当你需要重新填充缓冲你可以跳过若干行,并阅读下列行到缓冲区。

+0

thx for the一页一页的IO改进,确实帮助 –