- ベストアンサー
ADODB.Streamで開いたファイルに追記する
VBScriptでCSVファイルをADODB.Streamを使って開き ファイルの最終行に1レコード追加する処理を行いたいのですが、 開く際に"追記"を指定することはできないようです。 (FileSystemObjectでは開く際に"追記"を指定することが出来ますが) CSVファイルの形式がUTF-16BEであるため ADODB.Streamを使用して開きます。 どのようにすれば追記が可能でしょうか?
- みんなの回答 (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のソースをいじる回答に間違いが多い」ことや、 '結果的に「エスケープ」や「ヴァリデート」ではなく「サニタイズ」を考ることの一貫性が取れないことにイライラする 'あたりから来ているんだろうな、多分。
お礼
ご回答ありがとうございます。 ファイルの中身はLoadFromFileで全て読み込む方法で良いと思います。 ↓この一行でPositionを最後に移動させるのがポイントでした。 objStream.Position = objStream.size あとはWrite処理を行うことでファイルの最後に 追記することができました。