
やりたいことを先に書くと、最終的には
Linuxのtailに毛が生えたようなアプリをつくりたいと思っています。
開発環境はVB2008 Express Editionです。
で、まずはテキストファイルを後方から読む方法でつまっています。
指定した行数を後方から読むようにしたいと思っています。
最初は全行をいったん読み込んで配列に入れて処理という
書き方をしたのですが、大きなファイルの際にメモリを大量に消費し、
処理速度も遅くなったのでボツになりました。
今はとりあえず、バイナリで後ろから読み込んで改行文字列を
自分で見つけて処理をするという原始的な方法を思い浮かべていますが、
今っぽくないプログラミングであるような気がしています。
このようなことを実現する便利なクラス・機能やエレガントな記述等を
教えていただきたいと思っています。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
FileStreamからバイナリデータとして読み込んで文字列の配列に読み込むといった具合でしょう
dim Buf( 1023) as Byte
FileStreamのSeekメソッドでファイルの末尾へ移動 ... 1)
Seekで読み取りバッファ分だけファイルの先頭側へ移動 ... 2)
Read(Buf, 0, Buf.Length)で読み込み
CR(&H0D)やLF(&H0A)を探しながら BufをLength-1から0へ向けて検索および文字列化 ... 3)
希望の行数未満の場合は1)へ戻って 2)を繰り返し回数分戻して繰り返す
といった具合でしょう
3)の文字列化ですが UnicodeのファイルならSystem.Text.Encoding.Unicodeで
Shift_JIS(含むANSI)などのファイルならSystem.Text.Encoding.Defaultなどで変換が必要でしょう
No.1
- 回答日時:
あんまりエレガントではありませんが、以下のようなやり方をあげておきます。
(参考URL:ファイルを1行ずつ読み込む方法)
(1)String型変数を指定数だけ配列で用意しておきます。(要素数不定なので、引数などから要素数を決めてあげる必要があります)
(2)1行読み込みの結果を、この配列に天下り的に退避します。(最初は1番目に格納、次は1番目を2番目に退避して・・・)
(3)EOFになったら読み込みを終わるようにすると、配列に入っているのが最終行から指定行分の文字列になる。
取り急ぎで動作確認はしていないので、上手くいかなかったら申し訳ありません。
参考URL:http://dobon.net/vb/dotnet/file/readfile.html
ありがとうございます。
この方法なら確かに結果としてメモリを圧迫せずに後方の行のみを取得できますね。
しかし、tailのような機能にしようと思っているのでリアルタイムにファイル監視を行います。ので、ファイルに書き込みが行われるたびに全体を読み直すのは好ましくありません。
数百Mバイトのログファイルでの使用にも耐えられる仕様にしたいと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl 特定の文字列をdatファイ...
-
DXFファイルをVBで取り込み、図...
-
Cで2次元配列にCSVファイルを...
-
バイナリファイルでOutOfMemory...
-
CFileの使い方を教えてください
-
ファイル内の(&H0A)を(&H0D0A)...
-
バイナリデータの書き換え
-
バイト型のデータを16進表記で...
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
エクセルのハイパーリンクがコ...
-
ExcelブックをGoogleスプレッド...
-
動かなくなってしまった古いVBA...
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
ファイルのアクセス回数について
-
Wordで差込印刷した後に別々の...
-
「ファイルが見つかりません D...
-
[エクセル]コピーするとオブジ...
-
エクセルで複数のコメントのサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内の(&H0A)を(&H0D0A)...
-
バイナリファイルでOutOfMemory...
-
Cで2次元配列にCSVファイルを...
-
ファイルから構造体へデータを...
-
ファイル入力のデータを構造体...
-
RGBのバイナリデータをCImageに...
-
Mscomm を使用してバイナリでデ...
-
カウント数について
-
VB6.0 MSFlexGridのMouseRowプ...
-
テキストファイルを後ろから読...
-
DXFファイルをVBで取り込み、図...
-
C言語の問題です。
-
VBScriptの配列は、要素数を指...
-
VBAでテキストファイルの改行を...
-
ファイルからビット単位での読...
-
Unicodeのファイル読み込みがう...
-
バイナリ出力
-
インデックスが配列の境界外で...
-
配列操作について
-
CSVファイルによる検索の高速化
おすすめ情報