dポイントプレゼントキャンペーン実施中!

VB6.0でCSVを特定の行から削除、書き込みしたいと思っています。
Dim objFso, objTxtSt As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTxtSt = objFso.OpenTextFile(strPass, 8, -1)
Dim i As Integer
For i = 1 To 2 Step 1
objTxtSt.SkipLine
Next
Call objTxtSt.WriteLine(strpData)
objTxtSt.Close
Set objTxtSt = Nothing
Set objFso = Nothing
しかしSkipLineが読込み時専用らしく書き込み時、削除時行を指定する方法がわかりません。
エラーNo.54:「ファイルモードが不正です」

またOpenTextFileの第二、第三引数の意味がわかりません(Read、Writeモードの切り替えかと考えています)ので、教えていただけますでしょうか。

A 回答 (4件)

No2.です



FileSystemObjectでは、連続したファイルの内容を途中から変更等は難しいと思います。
FileSystemObjectを利用するのであれば、
1.読込み側のファイルをオープンする
2.適当な名前のファイルを書き込みモードでオープンする。
3.読み込み側、1行読み込む
4.書き込み側、読み込んだ行を修正し(?)書込み
3.4.繰り返し
5.両方のファイルを閉じる
6.読み込み側ファイル削除
7.書き込み側ファイル名前変更(読み込み側ファイル名に変更)

Openメソッドを利用したCSVのアクセス方法は下記URLを参照してみて下さい

参考URL:http://msdn.microsoft.com/ja-jp/library/cc440858 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
提示いただいたやり方の場合
1.一度元となるCSVを全て読込み
2.元となるCSV削除
3.読込んだデータを修正
4.同名のCSVを新規作成
5.修正したデータを書込み
現在以上のようにしているのですが、これとほぼ手間が変わらないように思います。

>FileSystemObjectでは、連続したファイルの内容を途中から変更等は難しいと思います。
参考サイトより、Openメソッドについて調べてみました。
しかしここにあるものもFileSystemObjectと同様に、ファイルの行数を指定しての読込みは不可能のように思います。
間違っていたら申し訳ありません。

お礼日時:2009/09/11 10:45

個本的にその様な処理で良いかと思います。


直接ファイルを操作する場合は、万が一の事も考慮して処理の流れを検討する事が一番重要と思います。
今後は、そのことを念頭に置いてプログラムの作成を進めて頂ければ結構だと思います。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございました。
>今後は、そのことを念頭に置いてプログラムの作成を進めて頂ければ結構だと思います。
ご教授していただいた内容を吟味し、今後に生かしていこうと思います。

お礼日時:2009/09/14 10:34

なぜ一度、作業ファイルを書き出しているかというと、途中での不慮の事故・障害に対応する為です。



※元のファイルを削除直後にアプリケーションエラー等が発生した場合、プログラム内のキャッシュも全て消えてしまいます。
ファイル書き込み中であれば、ファイル復活ソフトでも復旧出来なくなる可能性があります。

手間はかかりますが、この方法はかなり有効です。
    • good
    • 0
この回答へのお礼

おお、確かにそうですね。
そうなると私の場合は
1.読込CSVを全て読込み
2.読込CSVファイル名を変更
3.読込んだデータを修正
4.読込CSVと同名の書込CSVを新規作成
5.修正したデータを書込み
5.5.ここまででエラーが発生した場合
→書込CSV削除
→読込CSVファイル名を戻す
6.読込CSV削除
こんな感じでよろしいでしょうか。

お礼日時:2009/09/11 21:42

>Set objTxtSt = objFso.OpenTextFile(strPass, 8, -1)



2番目の引数は追記(ForAppending)モードなので削除等は出来ないのでは。

参考URL:http://msdn.microsoft.com/ja-jp/library/cc428044 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
OpenTextFileの引数に関しては、参考サイトより理解できました。
有難うございます。

Set objTxtSt = objFso.OpenTextFile(strPass, 2, -1)
とし、再度実行したところ同様のエラーが発生しました。
どのようにすればよいでしょうか。

お礼日時:2009/09/09 12:00

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