• 締切済み

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 ============================================================

みんなの回答

  • benelli
  • ベストアンサー率51% (78/152)
回答No.2

> スペースで区切られた2番目のカラムだけを取り出し、別のファイルに書き込むということをしたいのです。 用途が気になりますが、それだけでしたらか+α追加するだけでいいですね。 --------------------------------- Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFileR ' ファイル読み込み用 Dim objFileW1st ' ファイル読み込み用 Dim objFileW2nd ' ファイル読み込み用 Dim i Dim TempStr Dim LineDatahash '行データを空白でハッシュ Const vbWriteOnly = 2 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFileR = objFSO.OpenTextFile("d:\dr1.txt") Set objFileW1st = objFSO.OpenTextFile("d:\dr2.txt", vbWriteOnly ,True) Set objFileW2nd = objFSO.OpenTextFile("d:\dr3.txt", vbWriteOnly ,True) If Err.Number = 0 Then Do While objFileR.AtEndOfStream <> True TempStr = objFileR.ReadLine LineDatahash = Split(TempStr) If UBound(LineDatahash) = 1 then objFileW1st.writeline LineDatahash(0) objFileW2nd.writeline LineDatahash(1) ElseIf UBound(LineDatahash) >= 2 then objFileW1st.writeline LineDatahash(0) For i = 1 to UBound(LineDatahash) objFileW2nd.write LineDatahash(i) Next objFileW2nd.write vbNewLine Else objFileW1st.writeline TempStr objFileW2nd.writeline "[No Data]" End If Loop objFileR.Close objFileW1st.Close objFileW2nd.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFileR = Nothing Set objFileW1st = Nothing Set objFileW2nd = Nothing Set objFSO = Nothing --------------------------------- スペース区切りで3個以上データがあったときのことはあまり考慮していませんが、こんなもんでしょうか。 上記では配列を使用していますが、学習のためではなく実務のためのVBSでしたら適当に普通の変数に(扱いやすいように)置き換えてください。

tokudasinn
質問者

お礼

度々、ご回答ありがとうございます。 大変、助かります。

  • benelli
  • ベストアンサー率51% (78/152)
回答No.1

「ファイルにリダイレクト」とはファイルに書き出しをしたいということでしょうか?それでしたらとりあえず以下の通りに…… --------------------------------------- Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFileR ' ファイル読み込み用 Dim objFileW ' ファイル読み込み用 Const vbWriteOnly = 2 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFileR = objFSO.OpenTextFile("d:\dr1.txt") Set objFileW = objFSO.OpenTextFile("d:\dr2.txt", vbWriteOnly ,True) If Err.Number = 0 Then Do While objFileR.AtEndOfStream <> True objFileW.writeline objFileR.ReadLine Loop objFileR.Close objFileW.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFileR = Nothing Set objFileW = Nothing Set objFSO = Nothing ------------------------------------------ ファイルを開いたアプリケーションにリダイレクト? という意味でしたら、WScript.shellなどで標準出力することになります。って、あんまそんなことしませんか……

tokudasinn
質問者

お礼

早速の回答ありがとうございました。実際に動かしてみて、正常な動作をしました。大変、勉強になりました。 >>ファイルを開いたアプリケーションにリダイレクト? →おっしゃるとおりで、最終的にやってみたい事は、 開いたファイルから1行ずつ取り出すのですが、さらに、スペースで区切られた2番目のカラムだけを取り出し、別のファイルに書き込むということをしたいのです。 こちらも教えていただけたら幸いです。 よろしくお願い致します。

関連するQ&A