2013-04-02 11 views
5

VBAの質問VBAは逆の順序で線で大きなテキストファイルの行を読んで

大きなログファイル(50万周りの線)、私は最後からすなわち、逆の順序で行ずつ、それを読む必要があります最初の行に行を移動します。 私はMicrosoftスクリプトランタイム参照にFileSystemObjectオブジェクトを使用することができます知っているが、テキストストリーム

でReadLineメソッドのメソッドのためののようなそのようなオプションは今、私は考えることができる唯一の方法は次のように存在していない、カウンターを持っており、私が読んだ行の前の行をスキップしますが、間違いなくこれでは十分ではありません。どんな提案コード/ algoも高く評価されます。

+0

ログファイルのフォーマットと数行のデータを表示することができます...逆のデータをどのように使用するか、別のファイルに入れるか、MS Excel 2007+ Workbookを教えてください。 LogIDのようなKeyColumnはありますか? –

+1

このような大きなファイルで最適なオプションは、ADOとOLE DBテキストファイルドライバを使用することです。 [MSDN:テキストファイルについての多くのADO](http://msdn.microsoft.com/en-us/library/ms974559.aspx)を参照し、ORDER BY *キー列名* DESC –

答えて

3

ログが日付フィールドまたは行番号フィールドがあるかどうかを判断するためのフィールドを持つデータベースの種類の場合は、SQLクエリを使用してADOソリューションを使用してログを逆に読み取ろうとする可能性があります注文(ORDER BY ... DESC)。だから、あなたは最後から最初に読むことができます。または一般的にはADOを使用してみてください。

+1

+1と正確にORDER BYでADOを使用し、[MSDN:テキストファイルについての多くのADO](http://msdn.microsoft.com/en-us/library)を参照してください。 /ms974559.aspx) –

+0

テキストファイルとADO http://msdn.microsoft.com/en-us/library/ms974559.aspx –

+0

Thxの人、これは本当に良いアプローチですが、実現した後には私は行を読むことができません逆の行に加えて、ログの各行が正規化されていない場合、逆読みを必要とせずにそれを行うための "algo"を見つけます。入力してくれてありがとう! –

1

ファイルが行ベースでないか文字ベースであっても、それは単なるバイトなので、ファイル内で逆の順序で行を読み取る方法はありません。テキストを行に区切る方法は、テキストに行区切り文字がある場所によってのみ決まります。

最初から行を読み込んで回転バッファに格納することができます。たとえば、ファイルの最後に達したときにバッファに最後の1000行があるようにすることができます。そうすれば、1行ごとにファイル全体を読み込むことなく、バッファからアクセスできる一定数の行が得られます。

ファイル内にいくつの行があるかを知っているので、バッファを補充する必要があるときは、特定の行数をスキップして、次の行をバッファに読み込むことができます。

+0

thxを使用してデータを照会します。これはページ単位でのIOの改善であり、実際には –

関連する問題