• ベストアンサー

ファイル書き込み

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

質問者が選んだベストアンサー

  • ベストアンサー
  • akanekor
  • ベストアンサー率52% (102/194)
回答No.4

あ、、、見落としてました(==; >ファイルが開いたままになっている為、開けないと言っているのでしょうか? そうです。 同じファイルを2つ同時にopenする事は、出来ません。 書き込み前に out.csvファイルをいったん close してください。 てより、、、open処理が繰り返し内にあるのか(=w=; Do Loop から外出しした方がいいかも、、。 もしくは、初めの一回だけOpenするように、flag持たすとか。

SUPERH2O
質問者

補足

書き込み用ファイルをloopの外に出したんですが、if文の中で追記するようにするにはどのようにすればいいのでしょうか? また、Flagを立てるとはどういう事でしょうか?恐れ入りますが、アドバイスの方宜しくお願い致します。

その他の回答 (4)

  • akanekor
  • ベストアンサー率52% (102/194)
回答No.5

気になったんですが、、(==; 宿題とかじゃないよね、、。 とりあえず、面倒なので、書いちゃいます。 (略) ' ここ、処理毎に新規でファイル作成の場合は 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を立てるとはどういう事でしょうか 忘れてください。(--; やり方のひとつですから、。

SUPERH2O
質問者

お礼

上手くいきました。色々とありがとうございました。

  • akanekor
  • ベストアンサー率52% (102/194)
回答No.3

'800A0046' は、書き込み権限のエラーです。 IIS なら、 IIS設定の「匿名アクセスで使用されるアカウント」 をAdmin権限に変更してください。 また、前回動かしたASPがファイル掴んだままになって 落ちた場合もそんな風になったから、、、 一応再起動確認もしてみてください。

SUPERH2O
質問者

補足

アクセス権は問題なく、再起動しても変わりません。 読み込む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)
回答No.2

>エラーが出力され追記できない状態となっています エラーメッセージは何と言っていますか?

SUPERH2O
質問者

補足

>エラーメッセージは何と言っていますか? エラー内容:書き込みできません エラーコード:800A0046 以上、宜しくお願い致します。

  • akanekor
  • ベストアンサー率52% (102/194)
回答No.1

ForReading 1 ファイルを読み取り専用として開きます。このファイルには書き込むことができません。 ForWriting 2 ファイルを書き込み専用として開きます。 ForAppending 8 ファイルを開き、ファイルの最後に追加して書き込みます。 例: fso.OpenTextFile("c:\out.csv", ForAppending, True) 要は、 Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) の 2 が 間違い

SUPERH2O
質問者

補足

レスありがとうございます。 2→8に変えてみたんですが、エラーが出力され追記できない状態となっています。何故なんでしょうか?アドバイス下さい。

関連するQ&A

  • CSVファイル

    CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> ""         'IF文を記述(条件:日付)        '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing

  • VBScriptでのcsvデータ処理について

    プログラミング超初心者です。 仕事でwebサイトのPV数の集計をVBSで処理することを任されました。 読み込むcsvファイルはページのアドレスとPV数の他4項目あり、 同一アドレス毎にPV数の項目だけを集計します。 途中まで自分で書いてみましたが、時間が無くなって来ましたので相談させて頂きたいと思います。 とりあえず以下のように書いてみましたが、実際どう書けば良いのでしょうか?今のところstrLine = csvData.ReadLineのところでエラーになってしまいます。基本的に間違っていることが多いと思いますが、どなたかお時間あれば、ご指南頂けないでしょうか! Dim objFSO Dim csvData Dim strLine Dim arrLine Dim i Dim arrAllDate Dim view01 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("C:\Analytics.csv") csvData = objFile.ReadAll Do until csvData.AtEndOfStream   strLine = csvData.ReadLine   arrLine = split(strLine , ",")   Redim Preserve arrAllDate(i+1) arrAllDate(i)=arrLine i = i + 1 Loop Dim url01= arrAllDate(0,i) If url01= "/http://*********/*******/01"+ Then Do until url01 = <>"" view01 = view01 + arrAllDate(1,i) Loop      ・      ・      ・      ・

  • ダブルクォートで囲まれたCSVファイルについて

    CSVを読みこんで配列変換するロジックを考えていますがうまくいきません。 ソースは以下の通りです。 Dim objFs Dim objSm Dim strLine Dim arySplit Set objFs = CreateObject("Scripting.FileSystemObject") Set objSm = objFs.OpenTextFile(C:\sample.csv, 1) Do Until objSm.AtEndOfStream strLine = objSm.ReadLine strLine = Right(strLine, Len(strLine) - 1) strLine = Left(strLine, Len(strLine) - 1) arySplit = Split(strLine, "\"\",\"\"") MsgBox UBound(arySplit) Loop Set objSm = Nothing Set objFs = Nothing ※読み込むCSVファイルはダブルクォートが付いています。 ※正常に配列に変換できたかを確認する為、MsgBoxで配列の要素数を表示しようとしています。 やりたい事は 1.まずは先頭と最後のダブルクォートを除外。 2.区切り文字(\",\")で配列に変換。  ※なぜカンマで配列に変換しないかというとダブルクォートで囲まれた値の中にカンマ文字がある為、このような事をしています。 3.変数に変換した配列を格納。 申し訳ありませんがご教授いただけませんでしょうか。 またどうか皆さんのお知恵を私にお貸しいただけませんでしょうか。 何卒、宜しくお願い致します。

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • asp(vbscript)のエラー

    プログラム初心者です。 教えてください。 以下の処理が書かれている 画面のHTML上で実行開始のボタンを押すと、 書かれたSubプロシージャが走り、CSVファイル読み込みが始まります。 正解、不正解の判定をするダイアログ表示されて、できている様なのですが、 そのダイアログをOKで閉じると 以下のスクリプトエラーが表示されます。 どのような原因のエラーなのか教えていただけないでしょうか? デバッグすると If arrFields(1) = "あ" Thenの行でエラーが起きているようです。 すみません。よろしくお願いします。 Sub syori (省略) Set objFile = objFSO.OpenTextFile(file_path, ForReading) Do While objFile.AtEndOfStream <> True strData(i) = objFile.ReadLine Data = strData(i) i = i + 1 arrFields = Split(Data,",") 'MsgBox arrFields(1) If arrFields(1) = "あ" Then MsgBox "正解" else MsgBox "不正解" end if (省略) Sub End

  • VB6.0にて、CSVファイルを読み込もうとしているのですが、1行ずつ

    VB6.0にて、CSVファイルを読み込もうとしているのですが、1行ずつ読み込めません。 以下のコードで、Lineのメッセージボックスが表示されないのです。 どなたか教えていただけないでしょうか。よろしくお願いします。 'CSVファイル読み込み Sub Stream() Dim Line, Temp As Variant Dim objFSO As Object Dim objStream As Object Const ForReading = 1, ForWriting = 2, ForAppending = 3 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objStream = objFSO.OpenTextFile(strDFpath & strDFname(1), ForReading, False) Temp = objStream.ReadAll MsgBox Temp '最後の行までループ Do Until objStream.AtEndOfLine - 1 <> True '1行読む Line = objStream.ReadLine MsgBox Line Loop objStream.Close Set objStream = Nothing Set objFSO = Nothing End Sub

  • VBSでファイル作成後、書き込みできない

    ファイルが存在している場合は、ファイルをオープンして書き込み、ファイルが存在していない場合は、ファイルを作成後、オープンして書き込みを行わせたいと考えています。 しかし、ファイルが存在していないとき、ファイルは作成されるのですが、『エラー:800A0046 書き込みできません。VBScript実行時エラー』が出て、書き込みができません。モードをWritingにしても同じでした。 お手数をおかけしますが、ご教示いただけますようお願いいたします。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile '■ 定数の宣言 Const strFileName = "C:\VBS\TEST.TXT" '■ 定数の宣言 '// ファイル入出力モード(8:追加書き込み) Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else WScript.Echo "ファイルが見つかりませんでした" Set objFile = objFSO.CreateTextFile(strFileName) If IsObject(objFile) Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If '// ファイルのオープン Set objFile = objFSO.OpenTextFile(strFileName,ForAppending) objFile.WriteLine "2012/12/21,100,ブレーキパッド,35000"

  • vbscript ファイルのマージ

    VB初心者です。 C:\test配下の複数のファイルをマージする便利ツールを只今作成中なのですが、 下記プログラムを実行すると「If aryStrings(3) = "yes" Then」の行に対し、 「Subscript out of range」というエラーメッセージが表示されます。 マージの対象としているファイルの中身は次のようなイメージです。 100,101,102,yes,104,105,106,107,108,109,110,111 101,101,102,no,104,105,106,107,108,109,110,111 102,101,102,yes,104,105,106,107,108,109,110,111 103,101,102,no,104,105,106,107,108,109,110,111 104,101,102,yes,104,105,106,107,108,109,110,111 出力データ(output.txt)を見ると正常に処理されているようなのですが なぜこのようなメッセージが表示されるのかご教授いただきたいです。 お手数ですが宜しくお願い致します。 プログラム -------------------------------------------------------------------------------------------------------------------------- Dim FileName Dim fso,baseFolder Dim frFile,toFile Dim mFile Dim strLine1,strLine Dim aryStrings Dim msg FileName = InputBox("ファイル名を入力してください","ファイル名入力","output") Set fso = CreateObject("Scripting.FileSystemObject") Set baseFolder = fso.GetFolder("C:\test") Set toFile = fso.OpenTextFile("C:\test\" & FileName & ".txt" ,2 , True) For Each mFile In baseFolder.Files Set frFile = fso.OpenTextFile("C:\test\" & mFile.Name , 1) Do While frFile.AtEndOfStream <> True strLine1 = frFile.ReadLine() aryStrings = Split(strLine1, ",") If aryStrings(3) = "yes" Then strLine = aryStrings(0) +" "+ aryStrings(1) +" "+ aryStrings(9) +" "+ aryStrings(10) +" "+ aryStrings(11) toFile.Write strLine & vbCrLf Else End If Loop frFile.Close Set frFile = nothing Next toFile.Close msg = "処理終了" MsgBox msg --------------------------------------------------------------------------------------------------------------------------

  • 配列の中身の判別

    vbscript初心者です。 教えてください。 HTML内のボタンを実行するとonClick="sub_read()"で CSVファイル(TAB区切り)が読み込まれ 以下のスクリプトが走るのですが、 "型が一致しません"というエラーが表示されてしまいます。 ★マークの箇所が無ければエラーは無いのです。 すみません。 お願い致します。 <%@ Language = VBScript %> <script language=vbscript> Sub sub_read() Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") 'ファイルのレコード数を取得 With objFSO.GetFile(file_path).OpenAsTextStream(8) row = .Line .Close End With ReDim Data(row) i = 1 Set objFile = objFSO.OpenTextFile(file_path, ForReading) Do While objFile.AtEndOfStream <> True      Datas(i) = objFile.ReadLine Data = Datas(i) i = i + 1 DataFields = Split(Data,chr(9)) ★If DataFields(1) = "ABC" Then For j = 0 To Ubound(DataFields) If j = 1 Then MsgBox arrayFields(j)  End If Next Loop ★End If objFile.Close End Sub </script>

  • 特定のワークシートcsvファイル書き出しほか

    エクセルブックの中身が、 1番目 graphシート 2番目から19番目 ワークシート で構成されているエクセルファイルが100個 AAAというフォルダに入っています。 それぞれのエクセルブックにあるシートを、ブックのファイル名にしたフォルダを作成し、その中にcsvで書き出すプログラムを作りました。 また、AAAのフォルダの1つ上のフォルダ(VBA実行するカレントフォルダ)には、テキストファイルもあり、作成されたフォルダに合わせてコピーするようにしています。 一応、期待通りの動作をしましたが、スッキリとしたプログラムとするために、アドバイスをいただけないでしょうか? また、できれば、それぞれのブックの2番目から7番目のワークシートのみをcsvファイルで書き出したいと思い、シートを2番目から順にアクティブにして書き出すように変更しても1番目のグラフシートからcsvになってしまいました。 特定のワークシートのみをcsvファイルで書き出すにはどのように書いたら良いでしょうか? よろしくおねがいしむす Sub ファイル一括作成()     Application.ScreenUpdating = False         '対象ブックの選択     'フォルダ内のブックを順次選択     Dim FolderPath As String     Dim objFSO As Object     Dim objBook As Object     Dim objFiles As Object     Dim objFile As Object     Dim mysma4 As Object     Set objFSO = CreateObject("Scripting.FileSystemObject")     FolderPath = ActiveWorkbook.Path & "\AAA"     Set objBook = objFSO.GetFolder(FolderPath)     Set objFiles = objFSO.GetFolder(FolderPath).Files     Set mysma4 = objFSO.GetFile(ActiveWorkbook.Path & "\fig_all.TXT")     For Each objFile In objFiles      If objFSO.GetExtensionName(Path:=objFile) Like "xlsx" Then     'ベースファイル名フォルダ作成&sma4ファイルコピー       objFSO.CreateFolder Path:=FolderPath & "\" & objFSO.GetBaseName(objFile)       mysma4.Copy Destination:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\fig_all.TXT"     '各ファイルcsv書き出し      Workbooks.Open objFile.Path       For Each ws In Worksheets '各シートに対して処理を繰り返す           ws.Activate           'ベースファイルと同じ階層に出力           ActiveWorkbook.SaveAs _           Filename:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\" & ws.Name & ".csv", _           FileFormat:=xlCSV       Next ws       ActiveWorkbook.Close SaveChanges:=False      Else      End If     Next     MsgBox "ファイル作成が完了しました。"     Set objFSO = Nothing     Set objBook = Nothing     Set objFiles = Nothing     Set mysma4 = Nothing     Application.ScreenUpdating = True End Sub

専門家に質問してみよう