投稿時間:2003/08/05(Tue) 17:15 投稿者名:かな
URL :
タイトル:Re^6: ログファイルの作り方
お世話になっております。花ちゃんさん、お返事どうもありがとうございます。 ランダムファイルでは確かに行数の保持が必要なのでソースが複雑になってしまいました。 なので、教えて頂いたサンプルを元に、先頭1行を順次削除する方法を採りたいと思います。
No.4848を参考にし(ほぼ同じ)、自分なりにログを書き込む標準モジュールを作ってみました。 以下のソースです。(VBは始めたばかりなので間違いだらけかもしれません。) この中に自分の力では解決できなかった点がいくつかあります。また、ご教授願えませんでしょうか? よろしくお願い致します。
(1)No.4848と違うところがあります。以下の1行です。ログファイルにどうしても余分に半角スペース がひとつできてしまい、色々試したところ、「-1」とするところを「-2」としたらうまくいきました。 正しい直し方が分かりません。
ReDim bytArray(lngFileLenB - lngDelByt - 2)
(2)ログを書き込む処理もバイナリーモードにしたかったのですが、私の知識ではうまくいかず、結局 Appendモードを使用しています。(試したのは、API関数「StrToArry」を使用してログ情報の文字列 をバイト配列にして、Putステートメントでそのバイト配列を追加するという方法です。)
(3)書き込んだログ各行の最初と最後にダブルクオーテーションが付いてしまうのも気になっているので すが、直し方が分かりません。
'********************************************************************************** 'ログファイルの格納場所 Private Const strLogFilePath = "C:\Test\LogFile\" 'ログファイル名称 Private Const strLogFileName = "Test.log" '使用するファイル番号 Private intFileNo As Integer '-------------------------------------------------------------------------------- ' OpenFile ' ファイルを開く ' 引数:ファイルオープンのモード ' 「0」バイナリー読み取りモード ' 「1」バイナリー書き込みモード ' 「2」追加モード '-------------------------------------------------------------------------------- Public Sub OpenFile(intMode As Integer) '使用可能なファイルNoを取得 intFileNo = FreeFile 'ファイルをオープンする If intMode = 0 Then 'バイナリーモード Open strLogFilePath & strLogFileName For Binary As #intFileNo ElseIf intMode = 1 Then 'バイナリー(書き込み)モード Open strLogFilePath & strLogFileName For Binary Access Write As #intFileNo ElseIf intMode = 2 Then '追加モード Open strLogFilePath & strLogFileName For Append As #intFileNo End If
End Sub '-------------------------------------------------------------------------------- ' CloseFile ' ファイルを閉じる '-------------------------------------------------------------------------------- Public Sub CloseFile() 'ファイルを閉じる Close #intFileNo
End Sub '-------------------------------------------------------------------------------- ' WriteLog ' ログへの書き込み ' 引数: ' [1]処理日時 ' [2]処理ID ' [3]処理名称 ' [4]記録内容(開始、終了、エラー) ' [5]エラー情報 '-------------------------------------------------------------------------------- Public Sub WriteLog( _ strExecTime As String, _ strExecID As String, _ strExecName As String, _ strExecInfo As String, _ strExecError As String _ ) 'ログ情報取得用変数 Dim strLogInfo As String 'ログ書き込み情報を取得、編集 strLogInfo = strExecTime & " " & _ strExecID & " " & _ strExecName & " " & _ strExecInfo & " " & _ strExecError 'ファイルを開く OpenFile (2) 'ログを書き込む Write #intFileNo, strLogInfo 'ファイルを閉じる CloseFile '古いログを削除する DeleteLog
End Sub '-------------------------------------------------------------------------------- ' DeleteLog ' 古いログを削除する ' 備考:FileSystemObjectを使用するためには、参照設定 ' 「Microsoft Scripting Runtime」が必要となる '-------------------------------------------------------------------------------- Private Sub DeleteLog() 'ファイルシステムへのアクセスを提供するオブジェクト Dim Fso As New FileSystemObject 'ファイルへのシーケンシャルアクセスを行うオブジェクト Dim FsoTS As TextStream '削除する行 Dim strDelTxt As String Dim lngDelByt As Long Dim bytArrayDel() As Byte 'ファイルに残す行 Dim bytArray() As Byte 'ファイル全体(削除前) Dim lngFileLenB As Long '1行目のデータを読み込む Set FsoTS = Fso.OpenTextFile(strLogFilePath & strLogFileName) strDelTxt = FsoTS.ReadLine FsoTS.Close Set FsoTS = Nothing 'バイト数を取得する lngDelByt = LenB(StrConv(strDelTxt, vbFromUnicode)) + 1 '削除する行 lngFileLenB = FileLen(strLogFilePath & strLogFileName) 'ファイル全体 'Byte型配列のサイズを再宣言 ReDim bytArrayDel(lngDelByt) '削除する行 ReDim bytArray(lngFileLenB - lngDelByt - 2) 'ファイルに残す行 'ファイルを開く OpenFile (0) 'データを取得する Get #intFileNo, , bytArrayDel '削除する行 Get #intFileNo, , bytArray 'ファイルに残す行 'ファイルを閉じる CloseFile 'ファイルを削除する Kill strLogFilePath & strLogFileName 'ファイルを開く OpenFile (1) 'ファイルに残す行を書き込む Put #intFileNo, , bytArray 'ファイルを閉じる CloseFile
End Sub '**********************************************************************************
|