2

その始まり、私はVBSがあまり得意ではありませんが、学ぼうとしています。現在、テキストファイルに置換を書き込むのにいくつかの問題があります。

私がやりたいのは、テキスト「VGML」を検索することです。これが見つかったら、同じ行で「STML」があるかどうかを確認します。ある場合は、ファイル内の位置を混乱させないように、これを「」に置き換える必要があります。最後に、「STML」なしで「VGML」が見つかった場合は、「VGML」を削除する必要があります。

これまでのところ、echoを使用すると、コードが希望どおりに動作することがわかりますが、ファイルに書き込むと、ほとんどの場合、コードによってすべてが削除された空のファイルが取得されます。

誰かが私を正しい方向に向けることができますか?

コードは次のとおりです。

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Script\RemoveSTML\testFiles\test.txt", ForReading)

strEMTY = "    "
strSTML = "STML"
strVGML = "VGML"

Do Until objFile.AtEndOfStream
   strLine = objFile.ReadLine
   If InStr(strLine,strVGML)>0 Then
      If Instr(strLine,strSTML)>0 Then
         strLine = Replace(strLine, strSTML, strEMTY)
         wscript.Echo strLine
      Else
         strLine = Replace(strLine, strVGML, strEMTY)
         wscript.Echo strLine
      End If
   End If                                             
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile("C:\Script\RemoveSTML\testFiles\test.txt", ForWriting)
objFile.Write strLine
objFile.Close
Wscript.Echo "done"

ご協力いただきありがとうございます!私に正しい方向へのキックを与えてくれて!

4

1 に答える 1

1

ループでは、ファイルの各行を読み取り、それを変数に書き込みますstrLine
その後、「SMTL」/「VGML」を置き換えますが、その後は、の内容で何もしませんstrLine。次のループでソースファイルの次の行に置き換えるだけです。

最後にのみ、ファイルに1回書き込みstrLineますが、その瞬間にstrLineは、ソースファイルの最後の行のみが含まれます。

解決策:(ただし、VBScriptに精通していないため、これを行うかどうか/方法がわかりません)の宛先ファイルに書き込むか、ループ内で追加する2番目の文字列変数を使用できますが交換後...このように:Do...LoopstrLine

strFinal = strFinal & strLine

最後に、strFinalではなくファイルに書き込みますstrLine

于 2012-07-22T16:41:21.580 に答える