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モードの切り替えかと考えています)ので、教えていただけますでしょうか。
No.2ベストアンサー
- 回答日時:
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 …
回答ありがとうございます。
提示いただいたやり方の場合
1.一度元となるCSVを全て読込み
2.元となるCSV削除
3.読込んだデータを修正
4.同名のCSVを新規作成
5.修正したデータを書込み
現在以上のようにしているのですが、これとほぼ手間が変わらないように思います。
>FileSystemObjectでは、連続したファイルの内容を途中から変更等は難しいと思います。
参考サイトより、Openメソッドについて調べてみました。
しかしここにあるものもFileSystemObjectと同様に、ファイルの行数を指定しての読込みは不可能のように思います。
間違っていたら申し訳ありません。
No.4
- 回答日時:
個本的にその様な処理で良いかと思います。
直接ファイルを操作する場合は、万が一の事も考慮して処理の流れを検討する事が一番重要と思います。
今後は、そのことを念頭に置いてプログラムの作成を進めて頂ければ結構だと思います。
ご指摘ありがとうございました。
>今後は、そのことを念頭に置いてプログラムの作成を進めて頂ければ結構だと思います。
ご教授していただいた内容を吟味し、今後に生かしていこうと思います。
No.3
- 回答日時:
なぜ一度、作業ファイルを書き出しているかというと、途中での不慮の事故・障害に対応する為です。
※元のファイルを削除直後にアプリケーションエラー等が発生した場合、プログラム内のキャッシュも全て消えてしまいます。
ファイル書き込み中であれば、ファイル復活ソフトでも復旧出来なくなる可能性があります。
手間はかかりますが、この方法はかなり有効です。
おお、確かにそうですね。
そうなると私の場合は
1.読込CSVを全て読込み
2.読込CSVファイル名を変更
3.読込んだデータを修正
4.読込CSVと同名の書込CSVを新規作成
5.修正したデータを書込み
5.5.ここまででエラーが発生した場合
→書込CSV削除
→読込CSVファイル名を戻す
6.読込CSV削除
こんな感じでよろしいでしょうか。
No.1
- 回答日時:
>Set objTxtSt = objFso.OpenTextFile(strPass, 8, -1)
2番目の引数は追記(ForAppending)モードなので削除等は出来ないのでは。
参考URL:http://msdn.microsoft.com/ja-jp/library/cc428044 …
回答ありがとうございます。
OpenTextFileの引数に関しては、参考サイトより理解できました。
有難うございます。
Set objTxtSt = objFso.OpenTextFile(strPass, 2, -1)
とし、再度実行したところ同様のエラーが発生しました。
どのようにすればよいでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
フローチャート (ファイル併合...
-
SGファイルって何ですか?
-
ASP .NETでファイル選択ダイア...
-
ドラッグアンドドロップでファ...
-
大きいサイズのテキストファイ...
-
バッチで118項目のCSVを処理し...
-
分割コンパイルの#defineについて
-
テキストファイルの最終行を削...
-
.jarおよび.dllについて
-
フリーソフトウェアでflaファイ...
-
VBに、Cのincludeのようなもの...
-
「VBScript」ADODB.Streamにお...
-
VB6.0 特定の位置からの書き換え
-
CSVファイルへの保存の際、デー...
-
Excelマクロでの再読込み方法
-
マクロを作成したファイルを立...
-
識別子の外部結合について
-
ShellExecuteEx→WaitForSingleO...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
Javascript で INI の読み書き
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報