Travis
Travis

Reputation: 21

vbscript replace text - one works two breaks the whole thing

I want this script to replace two values in the same text file instead of one. However, if I uncomment line 12, it breaks the script. Do I have to make this into a loop, or can I do multiple replaces?

Sub ReplaceTxt()
'Writes values we got earlier to our unattend file       '
Const ForReading = 1
Const ForWriting = 2

   Set objFSO = CreateObject("Scripting.FileSystemObject")
   Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

   strText = objFile.ReadAll
   objFile.Close
   strNewText = Replace(strText, "***COMPNAME***", strCompname)
 '  strNewText = Replace(strText, "***Winkey***", strPoductkey)    '

   Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
   objFile.WriteLine strNewText
   objFile.Close
End Sub

Upvotes: 2

Views: 5442

Answers (4)

Jose Villa
Jose Villa

Reputation: 1

Well.. Thats easy.. Bueno ni tanto.. I was trying to do this some time. and i found the answer:

Sub ReplaceTxt()
 'Writes values we got earlier to our unattend file       '
 Const ForReading = 1
 Const ForWriting = 2

 Set objFSO = CreateObject("Scripting.FileSystemObject")
 Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

 strText = objFile.ReadAll
 objFile.Close
 strNewText = Replace(strText, "***COMPNAME***", strCompname)
 strNewText2 = Replace(strNewText, "***Winkey***", strPoductkey)    '

 Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
 objFile.WriteLine strNewText2
 objFile.Close
End Sub

Tanks, Gracias. José Villa From Culiacán, Sinaloa Mexico

Upvotes: 0

Travis
Travis

Reputation: 21

I'm sure my if statement is ugly to the real coders out there, but here's how I got it to work

Sub ReplaceTxt() 'Writes values we got earlier to our unattend file' 
  Const ForReading = 1
  Const ForWriting = 2
  counter = 1

  For Each searchterm In Array("COMPNAME", "Winkey")
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

      strText = objFile.ReadAll
      objFile.Close

      If counter < 2 Then
         strText = Replace(strText, searchterm, strCompname)
      Else
         strText = Replace(strText, searchterm, strProductKey)
      End If

      Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
      objFile.WriteLine strText
      objFile.Close
      counter = counter + 1
  Next
End Sub

Upvotes: 0

AnonJr
AnonJr

Reputation: 2757

Try this:

Sub ReplaceTxt() 'Writes values we got earlier to our unattend file' 
  Const ForReading = 1
  Const ForWriting = 2

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

  strText = objFile.ReadAll
  objFile.Close

  strText = Replace(strText, "COMPNAME", strCompname)
  strText = Replace(strText, "Winkey", strPoductkey)

  Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
  objFile.WriteLine strText
  objFile.Close
End Sub 

By doing it the way you were, you were using the original, unused text twice, overwriting the first replace when you did the second.

Upvotes: 0

Fredrik M&#246;rk
Fredrik M&#246;rk

Reputation: 158309

I think you will want to do the second replace on the string returned by the first one:

strNewText = Replace(strText, "***COMPNAME***", strCompname)
strNewText = Replace(strNewText , "***Winkey***", strPoductkey)

Otherwise you will lose the first replace, and only the second one will appear in the result.

Upvotes: 6

Related Questions