プロが教えるわが家の防犯対策術!

VBScriptでCSVファイルをADODB.Streamを使って開き
ファイルの最終行に1レコード追加する処理を行いたいのですが、
開く際に"追記"を指定することはできないようです。
(FileSystemObjectでは開く際に"追記"を指定することが出来ますが)
CSVファイルの形式がUTF-16BEであるため
ADODB.Streamを使用して開きます。

どのようにすれば追記が可能でしょうか?

A 回答 (1件)

Option Explicit



Dim objStream
Set objStream = CreateObject("ADODB.Stream")
'UTF-BEと入力し続けて誤りに気づけず、時間を食った。ヒドイです、先生(何。
objStream.CharSet = "UNICODEFEFF"

objStream.type = 2

' Openの第一引数にファイルパスの文字列与えたらエラーが起きて書けなかった。
objStream.Open()

'前述の通り直接ファイルを開けなかったのでファイルの中身を全て読み込むことに。質問者さんの環境ではうまくいくのかなぁ?

'ファイルにはabcと書かれている。
objStream.LoadFromFile("D:\aaa.txt")

'setEOSでうまくいくかと思いきや、Positionが0のままだったので、
'しょうがないからこの方向で。
objStream.Position = objStream.size

objStream.WriteText("def")

objStream.Flush()

'先ほどのファイルaaa.txtに書き込めなかったので
'別ファイルに書き込むことに。
'結果:ファイルが期待通りabcdefに。ねんがんのabcdefをてにいれたぞ!

'質問者さんの環境が俺と同じく、aaa.txtに書き込めないなかったら別のファイルを作る。
'もし、同名のファイルにしておきたかったら、別名ファイルを作っておいて、新しいファイルに書いて
'古い方削除して、新しい方をリネームみたいな手法になるだろうか。
objStream.SaveToFile("D:\aaa2.txt")
'閉じる。
objStream.Close()

'合図がないと実行されたのかよくわからなかったから。
Msgbox("End")

'CSVとして読んだわけじゃないから(あまり考え方としては好きではない。
'文字列データ内に改行があるケースは考えてないし、
'読み込んだ元データの最後に改行がないとかいうケースは考えりゃどうにかなるだろう。

'ただ、本当はExcelやOOo Calcで"CSVとして読みこんで"、マクロで(テキストファイルとしてではなく)CSVとしていじるって方が好き
'この辺は俺が「正規表現でXMLやHTMLのソースをいじる回答に間違いが多い」ことや、
'結果的に「エスケープ」や「ヴァリデート」ではなく「サニタイズ」を考ることの一貫性が取れないことにイライラする
'あたりから来ているんだろうな、多分。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ファイルの中身はLoadFromFileで全て読み込む方法で良いと思います。

↓この一行でPositionを最後に移動させるのがポイントでした。
objStream.Position = objStream.size

あとはWrite処理を行うことでファイルの最後に
追記することができました。

お礼日時:2009/11/09 23:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A