ファイル書き込みをするには?


丹羽@旭川  2005-06-14 10:25:53  No: 122571

はじめまして、丹羽と申します。

あるテキストファイルへの書き込み処理でエラーが表示されてしまいます。
どこに問題があるのかアドバイスをお願い致します。

既存のテキストファイル:C:\test.txt
----- テキストファイルの中身 -----
<略>
AAA=10000
BBB=20000
CCC=30000
<略>

ここで、「BBB=20000」をFileSystemObject、TextStremオブジェクトを
使用しVBで取得することが出来ました。

VBでは、取得した「BBB=20000」を「XXX=90000」に変更する処理を行い、
以下のような処理でファイルに書き込もうとしています。

    Dim obj_FileSys As New FileSystemObject
    Dim obj_TextStm As TextStream
    Dim i           As Long
    
    Set obj_FileSys = CreateObject("Scripting.FileSystemObject")
    Set obj_TextStm = obj_FileSys.OpenTextFile("C:\test.txt")

    'glb_lLinePosは、読み込み時に取得した該当行数
    For i = 1 To glb_lLinePos
        '書き込む行数までラインスキップ
        obj_TextStm.SkipLine
    Next
    
    '読み込んだ位置に新しい文字列を書き込んでる・・・ハズですが
    'ここで、「ファイルモードが不正です」というエラーが発生。
    obj_TextStm.WriteLine (s)

    'オブジェクトのクローズ・解放処理
    obj_TextStm.Close
    Set obj_TextStm = Nothing

※Set obj_TextStm = obj_FileSys.OpenTextFile("C:\test.txt",ForWritin)
  と第2パラメータに「ForWritin」を指定すると、obj_TextStm.SkipLineで
  エラー表示されます。

一度、全部ファイルを読み込んで処理を行なった方がよいかと思ったのですが
テキストファイルのサイズが50Kから150Kと物によってバラバラですので
出来れば、部分的な読み込み、部分的な書き込みを行なおうと試みてます。

環境は WindowsXP、VB6.0 SP5 です。
よろしくお願い致します。


通ってみた  2005-06-14 11:45:13  No: 122572

Open "ファイル名" For Output As #ファイル番号
    Print #ファイル番号, "書き込む内容"
Close #ファイル番号

ではダメなの?


LESIA  2005-06-14 13:29:31  No: 122573

引数iomodeを指定してないからでは?
引数iomodeを省略すると、読み取り専用になるのかも。
また、書き込み専用で開いた場合でも、上書きとなり
2行目だけ書き換えることは出来ません。
なので、すべて読み込んだ後、変更を行い、すべてを
書き込むようにします。

参考
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsmthopentextfile.asp

    Dim obj_FileSys As New FileSystemObject
    Dim obj_TextStm As TextStream
    Dim i           As Long
    Dim strData()   As Long
    
    Set obj_FileSys = CreateObject("Scripting.FileSystemObject")
    Set obj_TextStm = obj_FileSys.OpenTextFile("C:\test.txt", ForReading)

    i = 0
    Do Until obj_TextStm.AtEndOfStream
       ReDim Preserve strData(i)
       strData(i) = obj_TextStm.ReadLine
       i = i + 1
    Loop

    'オブジェクトのクローズ
    obj_TextStm.Close

    'glb_lLinePosは、読み込み時に取得した該当行数
    strData(glb_lLinePos) = "XXX=90000"

    Set obj_TextStm = obj_FileSys.OpenTextFile("C:\test.txt", ForWriting)
    For i = 0 To UBound(strData)
        obj_TextStm.WriteLine strDate(i)
    Next i

    'オブジェクトのクローズ・解放処理
    obj_TextStm.Close
    Set obj_TextStm = Nothing


LESIA  2005-06-14 13:31:23  No: 122574

すいません。
Dim strData() As Long
じゃなくて
Dim strData() As String
でした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加