プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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でしたら適当に普通の変数に(扱いやすいように)置き換えてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/02 00:21

「ファイルにリダイレクト」とはファイルに書き出しをしたいということでしょうか?それでしたらとりあえず以下の通りに……



---------------------------------------
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などで標準出力することになります。って、あんまそんなことしませんか……
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。実際に動かしてみて、正常な動作をしました。大変、勉強になりました。

>>ファイルを開いたアプリケーションにリダイレクト?
→おっしゃるとおりで、最終的にやってみたい事は、
開いたファイルから1行ずつ取り出すのですが、さらに、スペースで区切られた2番目のカラムだけを取り出し、別のファイルに書き込むということをしたいのです。
こちらも教えていただけたら幸いです。

よろしくお願い致します。

お礼日時:2008/11/28 23:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A