- ベストアンサー
ファイル書き込み
out.csvファイルに追記していくにはどのように記述すればいいのでしょうか? アドバイス下さい。 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") 'objFile.ReadLine Do While Not objFile.AtEndOfStream StrLine = objFile.ReadLine MyString = split(StrLine,",") ' msgbox Mid(MyString(0),2,10) ' MyString = split(objFile.ReadLine,",") if Mid(MyString(0),2,10) = "(PDH-CSV 4" then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) msgbox "!!!" end if ' if Mid(MyString(0),2,10) = DateString then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) ' 'msgbox Mid(MyString(0),2,10) msgbox "???" end if loop objFile.close Set objFSO = Nothing Set objFile = Nothing
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
あ、、、見落としてました(==; >ファイルが開いたままになっている為、開けないと言っているのでしょうか? そうです。 同じファイルを2つ同時にopenする事は、出来ません。 書き込み前に out.csvファイルをいったん close してください。 てより、、、open処理が繰り返し内にあるのか(=w=; Do Loop から外出しした方がいいかも、、。 もしくは、初めの一回だけOpenするように、flag持たすとか。
その他の回答 (4)
- akanekor
- ベストアンサー率52% (102/194)
気になったんですが、、(==; 宿題とかじゃないよね、、。 とりあえず、面倒なので、書いちゃいます。 (略) ' ここ、処理毎に新規でファイル作成の場合は 2 ' 前回処理の内容を残すなら 8 Set objWFile=objFSO.OpenTextFile("c:\out.csv",8,true) Do While Not objFile.AtEndOfStream StrLine = objFile.ReadLine MyString = split(StrLine,",") if Mid(MyString(0),2,10) = "(PDH-CSV 4" then objWFile.write(StrLine) msgbox "!!!" end if if Mid(MyString(0),2,10) = DateString then objWFile.write(StrLine) msgbox "???" end if loop objFile.close objWFile.close Set objFSO = Nothing Set objFile = Nothing >Flagを立てるとはどういう事でしょうか 忘れてください。(--; やり方のひとつですから、。
お礼
上手くいきました。色々とありがとうございました。
- akanekor
- ベストアンサー率52% (102/194)
'800A0046' は、書き込み権限のエラーです。 IIS なら、 IIS設定の「匿名アクセスで使用されるアカウント」 をAdmin権限に変更してください。 また、前回動かしたASPがファイル掴んだままになって 落ちた場合もそんな風になったから、、、 一応再起動確認もしてみてください。
補足
アクセス権は問題なく、再起動しても変わりません。 読み込むCSVが、 "09/26/2005 0:00:00,aaa,bbb,ccc" "09/26/2005 0:00:15,aaa,bbb,ccc" "09/26/2005 0:00:30,aaa,bbb,ccc" "09/26/2005 0:00:45,aaa,bbb,ccc" "09/26/2005 0:01:00,aaa,bbb,ccc" と言った感じにログがあります。 日付で比較し一致したら、ファイルに追記する仕様なんですが、1行目を書き込んだ際に、ファイルが開いたままになっている為、開けないと言っているのでしょうか?
- Bonjin
- ベストアンサー率43% (418/971)
>エラーが出力され追記できない状態となっています エラーメッセージは何と言っていますか?
補足
>エラーメッセージは何と言っていますか? エラー内容:書き込みできません エラーコード:800A0046 以上、宜しくお願い致します。
- akanekor
- ベストアンサー率52% (102/194)
ForReading 1 ファイルを読み取り専用として開きます。このファイルには書き込むことができません。 ForWriting 2 ファイルを書き込み専用として開きます。 ForAppending 8 ファイルを開き、ファイルの最後に追加して書き込みます。 例: fso.OpenTextFile("c:\out.csv", ForAppending, True) 要は、 Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) の 2 が 間違い
補足
レスありがとうございます。 2→8に変えてみたんですが、エラーが出力され追記できない状態となっています。何故なんでしょうか?アドバイス下さい。
補足
書き込み用ファイルをloopの外に出したんですが、if文の中で追記するようにするにはどのようにすればいいのでしょうか? また、Flagを立てるとはどういう事でしょうか?恐れ入りますが、アドバイスの方宜しくお願い致します。