• ベストアンサー

vbs csvファイル内の行を変更

vbsにて、csvファイルを読み込み、 以下のように行の値を変更することは可能でしょうか。 変更箇所は1行目です。 <元csvファイル> 氏名 性別 年齢  <変更後csvファイル> フルネーム 男女 年 住所 電話番号 コードのご教示お願いいたします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

D&Dでお試しください。 Option Explicit Dim objArgs, Fso, Arg, buf, FilePath Set objArgs = WScript.Arguments Set Fso = CreateObject("Scripting.FileSystemObject") If objArgs.Count < 1 Then WScript.Quit For Each Arg In objArgs FilePath = Arg With Fso.OpenTextFile(FilePath) .SkipLine '1行スキップ buf = .ReadAll .Close End With With FSO.OpenTextFile(FilePath, 2) .WriteLine "フルネーム,男女,年,住所,電話番号" .Write buf .Close End With Next

tyarutiru
質問者

お礼

補足コメントですが、2行目以降に値が入っていなかったためエラー蜷田みたいです。 コードのご教示ありがとうございました。 また、Prome_Linさん、コードの説明ありがとうございました。

tyarutiru
質問者

補足

ご回答ありがとうございます。 試してみましたが、以下のエラーが出ます。 エラー:「ファイルの最後を超えた入力を行おうとしました。」 原因と解決法をご教示頂けますでしょうか。

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

私は、「watabe007さん」のプログラムの説明だけですので、ベストアンサーは必ず、「watabe007さん」にお願いします。 Option Explicit 「厳密に」とか「明確に」というような意味で、このオプションを設定すると、変数は、その使用の前に、必ず、「Dim」等によって、宣言しておかなければなりません。 Set objArgs = WScript.Arguments ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされたものは「objArgs」に入ります。 たとえば、3つファイルをドラッグ&ドロップした場合、「objArgs(0)」、「objArgs(1)」、「objArgs(2)」にそれぞれのファイルの情報が入ります。 「MsgBox(objArgs(0)」などとすると、ドラッグ&ドロップしたファイルのフルパス(たとえば「D:\Programming\Sample.csv」などと表示します。 あたかも、配列変数のように見えますが、配列変数ではなく、ある意味、ドラッグ&ドロップしたファイルそのものですので、「objArgs(0)」の内容を変更することは出来ません。 Set Fso = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱うまた、テキストファイルを扱う「Windows」の機能を読み込んでいます。 If objArgs.Count < 1 Then WScript.Quit 1つもドラッグ&ドロップしていなければ、プログラムそのものを終了してしまいます「objArgs.Count」がドラッグ&ドロップしたファイルの数、「WScript.Quit」がプログラムの強制終了です)。 For Each Arg In objArgs ドラッグ&ドロップしたものを1つずつ処理します。 FilePath = Arg 見つかったファイルを「FilePath」という変数に入れています。 With Fso.OpenTextFile(FilePath) テキストファイルとして開いています(より明確にするのでしたら、「Fso.OpenTextFile(FilePath, 1)」として、「読み込み専用」であることをしてしますが、指定しなければ、「読み込み専用」ですので問題ありません)。 以後、「.~」で「Fso.OpenTextFile(FilePath).~」と記述しているのと同じになります。 .SkipLine '1行スキップ もちろん、「1行読み飛ばし」です。 buf = .ReadAll 「ReadAll」ですから、一気に全部読み込んでいますが、最初1行読み飛ばしていますので、最初の1行目は含みません。 .Close ファイルを閉じています。 End With ここまで「With Fso.OpenTextFile(FilePath)」が有効です。 With FSO.OpenTextFile(FilePath, 2) もう一度、同じファイルを今度は、「2」ですから「書き込み専用」で開いています。 この時点で、ある意味、元のファイルは消えて無くなり、新規に作成したのと同じになります。 .WriteLine "フルネーム,男女,年,住所,電話番号" 1行目のデータを書き込んでいますが、「WriteLine」ですから、最後に「改行」が入ります。 .Write buf 最初に読み込んだ分を書き込んでいますが、今度は、「Write」です。 これは、最初に読み込んだデータがすでに改行などもすべて含んでいるので、「WriteLine」で改行してはよけいな改行が入ってしまうからです。 .Close ファイルを閉じています。

関連するQ&A