はじめまして、丹羽と申します。
あるテキストファイルへの書き込み処理でエラーが表示されてしまいます。
どこに問題があるのかアドバイスをお願い致します。
既存のテキストファイル: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 です。
よろしくお願い致します。
Open "ファイル名" For Output As #ファイル番号
Print #ファイル番号, "書き込む内容"
Close #ファイル番号
ではダメなの?
引数iomodeを指定してないからでは?
引数iomodeを省略すると、読み取り専用になるのかも。
また、書き込み専用で開いた場合でも、上書きとなり
2行目だけ書き換えることは出来ません。
なので、すべて読み込んだ後、変更を行い、すべてを
書き込むようにします。
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
すいません。
Dim strData() As Long
じゃなくて
Dim strData() As String
でした。
ツイート | ![]() |