- PR -

テキストファイル読み書きについて

投稿者投稿内容
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2007-01-05 18:18
テキストファイルに、10行しかデータを書き込めないとして、
ある処理をすると1行ずつデータを書き込んでいくとします。
10行目まで書いたら、次の処理での書き込みは、
1行目に上書きする、というような処理を
VBで書くことはできないでしょうか??

よろしくお願いしますm(__)m
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-01-05 18:28
「できないでしょうか」と言われれば、「できます」という答えになりますが。

「ファイルに」上書きするという考えではなく、プログラム内に配列を持っておいて「配列に」上書きして、
その配列を新しいファイルを書き出す、と考えてください。
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2007-01-05 18:34
mioさん、お返事ありがとうございますm(__)m
そうですね、質問のしかたが少しよくないですね
すみません。
もしお時間があれば、
少し詳しくコードのサンプル等書いていただけると助かります。
いただいたお返事を元に、自分でも調べてみます。
ありがとうございましたm(__)m
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2007-01-05 18:40
たびたびすみません。
追記ですが、
実際は4メガ程度のログで、
このような処理を行いたいと思っています。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-01-05 19:38
普通はスグに上書きしないで、ログファイル自体を世代管理してローテーションするのが普通だと思います。
1ファイルでもできないことはないでしょうが、処理のコストがかなりかかるような気がしますし。。。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-05 20:05
#私はログファイル自体を分けてしまうことが多いのですが・・

引用:

ちぇびさんの書き込み (2007-01-05 18:18) より:
テキストファイルに、10行しかデータを書き込めないとして、
ある処理をすると1行ずつデータを書き込んでいくとします。
10行目まで書いたら、次の処理での書き込みは、
1行目に上書きする、というような処理を
VBで書くことはできないでしょうか??


1行目に戻る・・ではなくて、追記したあとで所定の行数を超過した分だけ配列の先頭から{削除して書き込む|書き込み時にスキップする}というのではダメですか?


リダーマーク
会議室デビュー日: 2007/01/04
投稿数: 6
投稿日時: 2007-01-05 20:45
こんにちは

業務側のシステムでは、いつも同じ名前のログ xxxsystem.log とかを出力させておいて
外部のプログラムで、みなさんが書かれているように、ログローテーションさせるのが
個人的にはいいかなー って思います。

たとえば、Solarisなら、logadm ってコマンドでサイズだったり期間で
ローテーションさせることができます。

xxxsystem.log.1 -> xxxsystem.log.2
xxxsystem.log.0 -> xxxsystem.log.1
xxxsystem.log -> xxxsystem.log.0

Windowsだと、Windows Server 2003 R2 だと
Common Log File System というのがあるらしいのですが、詳細は知りません。

VBSで作って、バッチから呼ぶようにして、1日1回Windowsのタスクから
このバッチを呼び出してあげればOKそうですね。

VBにこの機能を組み込むことの弊害はおわかりですよね?
運用部署が変わって、やっぱり2週間ごとにログをローテーションさせたい
とか、要件が変わってきた場合に、VBの中でやってると、EXEを
作り直さないといけません。 (外部設定ファイルでいろいろできる設計なら別ですが)

(このVBのシステムが常にログファイルを排他的につかんでるなら
 内部でローテーションしないとだめかな・・・)
リダーマーク
会議室デビュー日: 2007/01/04
投稿数: 6
投稿日時: 2007-01-05 21:04
しまった、.NETの会議室でしたね。申し訳ございません。

一応サンプル的なものを書いて、お茶を濁します。(汗

Dim fi As New System.IO.FileInfo("C:\xxxsystem.log")
Dim logsize As Long = fi.Length
if logsize > 4194304 then
System.IO.File.Move("C:\xxxsystem.log", "C:\xxxsystem.log.0")
end if

ログファイルそのものが移動されては困るということであれば
移動後に、0バイトでクリエイトしちゃえばよいかな?
Dim sw As New System.IO.StreamWriter("c:\xxxsystem.log", _
False, _
System.Text.Encoding.GetEncoding(932))
sw.Close()

動作環境が無いので、申し訳ございませんが、間違えがあったら
ご指摘ください。

スキルアップ/キャリアアップ(JOB@IT)