2016-10-28 8 views
2

ファイル全体をメモリにロードせずに、大きなテキストファイルの内容をすぐにアプリケーションに表示したいと考えています。大きな(GB)テキストファイルをすばやく表示するにはどうすればよいですか?

どのように他の人がそうしていますか?

  1. Total Commanderそれをしない驚くべき内部ビューアを持っている素晴らしいツールです。どれくらいの大きさ、瞬時に(または私はそれを時間を計ることができないほど)どんなファイルでも開く。私は12GBファイルで試しました。ファイルを表示する際には、メモリ使用量はほとんどありません(〜100KBのみ)。彼らはどうやって?

  2. SynEdit - 最初にファイル全体を解析するので、テキストが表示されるので、プログラムがフリーズします(分)。

  3. LargeTextFile
    スクロールバーのサイズに近似します。プログラムが最終的にファイル全体を読み取るまで数分かかることがあるまで、スクロールバーは連続的に調整されます(縮小します)。トータル・コマンダーと比べると、それは本当に吸う。などによってあなただけのブロックでファイルを読み込むプログラムがフリーズ(私は忍耐(またはラムを持っていなかったとして、それを殺すために持っていた)ようにする仕上げです)

+0

彼らはラインを読んでいないので。彼らは限られた量のBYTESを読む。例えば表示ウィンドウに200文字しか表示できない場合は、一度に200バイトを読み込みます。 –

+0

はい、それは一度にENTIRE行を読み込まなければならないという意味ではありません。ファイルは何バイト/何行かにかかわらず、依然としてバイト列です。読み込んだ200バイトに改行が含まれていない場合は、開始時にX文字を取り除き、X個以上の文字を読み込み、それらを "メモリ内"データの最後に貼り付けることができます。効果的に "スクロール"します。 –

+3

'CreateFileMapping'と' MapViewOfFile'を使ってファイルの生のバイトにすばやくアクセスし、スクロール中にビューを「スライド」させ、必要に応じて各ビューデータ内の行を解析することができます。 –

答えて

7

( -

  • ウルトラ32 64KBまたは128KBのチャンク)、それらのブロック内の行を計算します。ドキュメント全体(Silvesterが提案しているように)で行を操作しようとしないでください。ブロックとオフセットを使用して、行を知らないという事実をエミュレートするためにUIをトリックしてください。

    スクロールバーは行に続くのではなく、ファイル内のオフセット、次にブロック内のオフセットです。バーを動かすと、チャンクの先頭と末尾に一番近い行を推測します。

    欠点は、チャンクである最大の行の長さを持つ方が簡単だということです。 TotalCommanderは非常に長い行を折り返しますが、内部のチャンクアルゴリズムのためだと思います。デルファイ、利用可能なソースコードで書かれ

  • 1

    これは大きな は、彼らが32ビットWindowsプロセス2ギガバイトのメモリに収まらないことを意味し、大きなテキストファイルを表示するための非常にシンプルなツールです 使える。私はそれを成功裏にテストして、テキストの789.577.286行を含む 英語のWikipediaの48 GBのXMLダンプを表示しました。

    https://sourceforge.net/projects/dzlargetextview/

    (はい、私は知っている、これは古い質問ですが、例としては、まだ役に立つかもしれません。)

    +0

    ありがとうございます。遅すぎることはありません。 libは印象的なようだ。 – Ampere

    +0

    ウェブサイトにはEXEファイルのみが表示されます。そこにソースコードはありません。 – Ampere

    +0

    ソースコードはsvnにあります。必要なライブラリはsvn:externalと定義されているので、コンパイルするのに必要なものはすべてトランクをチェックアウトする必要があります。 https:// sourceforge。net/p/dzlargetextview/code/HEAD/tree/ – dummzeuch

    関連する問題