bt707
asked on
vbs - multiple edits on a ini file
I have a ini file I need to replace 3 lines with new values, (some of the lines can be found more than one time)
The code I have below works for replacing these lines, but the only way I can get it to work is to open the file and edit the file 3 seperate times which not such a good way to do it.
What I want to do is just open the file one time and edit the 3 values whereever they are found then close the file so I don't have to do all the opening, editing and closeing 3 seperate times.
The 3 lines I need to replace start with:
popserver=
popaccount=
checkformailevery=
Example, in this file I have these 3 lines
popserver=mail.abc.com
popaccount=user@mail.xyz.c om
checkformailevery=20
So want to make them look like:
PopServer=NO_Check_Mail
POPAccount=NO_Mail-pop
CheckForMailEvery=0
popserver=mail.abc.com replace with PopServer=NO_Check_Mail
popaccount=user@mail.xyz.c om replace with POPAccount=NO_Mail-pop
checkformailevery=20 replace with CheckForMailEvery=0
The following 3 peices of code will do what I want if I go through the process of opening and editing the file 3 seperate times. How can I open the file once and make the edits I need.
Const Reading = 1
Const Writing = 2
Set objFSO = CreateObject("Scripting.Fi leSystemOb ject")
Set objTextFile = objFSO.OpenTextFile("c:\te mp\test.in i", Reading)
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
intLineFinder = InStr(LCase(strNextLine), "popserver")
If intLineFinder <> 0 Then
strNextLine = "PopServer=NO_Check_Mail"
End If
strNewFile = strNewFile & strNextLine & vbCrLf
Loop
objTextFile.Close
Set objTextFile = objFSO.OpenTextFile("c:\te mp\test.in i", Writing)
objTextFile.WriteLine strNewFile
objTextFile.Close
Const Read = 1
Const Write = 2
Set objFSOini = CreateObject("Scripting.Fi leSystemOb ject")
Set objTextFileini = objFSOini.OpenTextFile("c: \temp\test .ini", Read)
Do Until objTextFileini.AtEndOfStre am
strNextLine = objTextFileini.Readline
intLineFinder = InStr(LCase(strNextLine), "popaccount")
If intLineFinder <> 0 Then
strNextLine = "POPAccount=NO_Mail-pop"
End If
strNewFile = strNewFile & strNextLine & vbCrLf
Loop
objTextFileini.Close
Set objTextFileini = objFSOini.OpenTextFile("c: \temp\test .ini", Write)
objTextFileini.WriteLine strNewFile
objTextFileini.Close
Const Read = 1
Const Write = 2
Set objFSOini = CreateObject("Scripting.Fi leSystemOb ject")
Set objTextFileini = objFSOini.OpenTextFile("c: \temp\test .ini", Read)
Do Until objTextFileini.AtEndOfStre am
strNextLine = objTextFileini.Readline
intLineFinder = InStr(LCase(strNextLine), "checkformailevery")
If intLineFinder <> 0 Then
strNextLine = "CheckForMailEvery=0"
End If
strNewFile = strNewFile & strNextLine & vbCrLf
Loop
objTextFileini.Close
Set objTextFileini = objFSOini.OpenTextFile("c: \temp\test .ini", Write)
objTextFileini.WriteLine strNewFile
objTextFileini.Close
Thanks for any help or pointers.
The code I have below works for replacing these lines, but the only way I can get it to work is to open the file and edit the file 3 seperate times which not such a good way to do it.
What I want to do is just open the file one time and edit the 3 values whereever they are found then close the file so I don't have to do all the opening, editing and closeing 3 seperate times.
The 3 lines I need to replace start with:
popserver=
popaccount=
checkformailevery=
Example, in this file I have these 3 lines
popserver=mail.abc.com
popaccount=user@mail.xyz.c
checkformailevery=20
So want to make them look like:
PopServer=NO_Check_Mail
POPAccount=NO_Mail-pop
CheckForMailEvery=0
popserver=mail.abc.com replace with PopServer=NO_Check_Mail
popaccount=user@mail.xyz.c
checkformailevery=20 replace with CheckForMailEvery=0
The following 3 peices of code will do what I want if I go through the process of opening and editing the file 3 seperate times. How can I open the file once and make the edits I need.
Const Reading = 1
Const Writing = 2
Set objFSO = CreateObject("Scripting.Fi
Set objTextFile = objFSO.OpenTextFile("c:\te
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
intLineFinder = InStr(LCase(strNextLine), "popserver")
If intLineFinder <> 0 Then
strNextLine = "PopServer=NO_Check_Mail"
End If
strNewFile = strNewFile & strNextLine & vbCrLf
Loop
objTextFile.Close
Set objTextFile = objFSO.OpenTextFile("c:\te
objTextFile.WriteLine strNewFile
objTextFile.Close
Const Read = 1
Const Write = 2
Set objFSOini = CreateObject("Scripting.Fi
Set objTextFileini = objFSOini.OpenTextFile("c:
Do Until objTextFileini.AtEndOfStre
strNextLine = objTextFileini.Readline
intLineFinder = InStr(LCase(strNextLine), "popaccount")
If intLineFinder <> 0 Then
strNextLine = "POPAccount=NO_Mail-pop"
End If
strNewFile = strNewFile & strNextLine & vbCrLf
Loop
objTextFileini.Close
Set objTextFileini = objFSOini.OpenTextFile("c:
objTextFileini.WriteLine strNewFile
objTextFileini.Close
Const Read = 1
Const Write = 2
Set objFSOini = CreateObject("Scripting.Fi
Set objTextFileini = objFSOini.OpenTextFile("c:
Do Until objTextFileini.AtEndOfStre
strNextLine = objTextFileini.Readline
intLineFinder = InStr(LCase(strNextLine), "checkformailevery")
If intLineFinder <> 0 Then
strNextLine = "CheckForMailEvery=0"
End If
strNewFile = strNewFile & strNextLine & vbCrLf
Loop
objTextFileini.Close
Set objTextFileini = objFSOini.OpenTextFile("c:
objTextFileini.WriteLine strNewFile
objTextFileini.Close
Thanks for any help or pointers.
ASKER
sirbounty,
I get a error on line 8
Line 8
Char 1
Also, I have this in a script that does a lot of different things and don't want to create a new output file, will this work as well if I just do a inplace edit (or recreate the file the way I was doing it)
Thanks for you help,
I get a error on line 8
Line 8
Char 1
Also, I have this in a script that does a lot of different things and don't want to create a new output file, will this work as well if I just do a inplace edit (or recreate the file the way I was doing it)
Thanks for you help,
What's the error?
Yes, it will work for replacing the file, you'll just need to delay the 'creation' (or recreation).
Presumably you changed the location of the file to be read?
Try this version to replace the file:
Yes, it will work for replacing the file, you'll just need to delay the 'creation' (or recreation).
Presumably you changed the location of the file to be read?
Try this version to replace the file:
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
INIFile = "C:\Test\file.init"
NewPopServer="NO_Check_Mail"
NewPOPAccount="NO_Mail-pop"
NewCheckMail=0
arrData = Split(objFSO.OpenTextFile(INIFile).ReadAll, vbNewLine)
For each strData in arrData
If Instr(strData, "popserver=") > 0 Then
NewData = NewData & "popserver=" & NewPopServer & vbNewLine
ElseIf Instr(strData, "popaccount=") > 0 Then
NewData = NewData & "popaccount=" & NewPopAccount & vbNewLine
ElseIf instr(strData, "checkformailevery=") > 0 Then
NewData = NewData & "checkformailevery=" & NewCheckMail & vbNewLine
Else
NewData = NewData & strData & vbNewLine
End If
Next
Dim objOut : Set objOut = objFSO.CreateTextFile(INIFile)
objOut.WriteLine NewData
objOut.Close
ASKER
Sorry, I did not past the error, this is the error I get, now on line 7
Line 7
Char 1
error: Input past end of file
Looks like it's this line
arrData = Split(objFSO.OpenTextFile( INIFile).R eadAll, vbNewLine)
Thanks,
Line 7
Char 1
error: Input past end of file
Looks like it's this line
arrData = Split(objFSO.OpenTextFile(
Thanks,
Odd - try this in place of that line:
arrData = Split(Trim(objFSO.OpenText File(INIFi le).ReadAl l), vbNewLine)
arrData = Split(Trim(objFSO.OpenText
ASKER
I get the same error
error: Input past end of file
Not sure what's causing that.
error: Input past end of file
Not sure what's causing that.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
sirbounty,
No more errors, it did not edit but I found out why, the case in the file is dffierent than what I put in.
I had fixed that part in my original script so did not notice that. Problem way what I posted and did not note that.
It's working now for what I wanted to do, so I don't have to open and edit the file 3 times.
Very nice help here,
Thank you very much!!!
No more errors, it did not edit but I found out why, the case in the file is dffierent than what I put in.
I had fixed that part in my original script so did not notice that. Problem way what I posted and did not note that.
It's working now for what I wanted to do, so I don't have to open and edit the file 3 times.
Very nice help here,
Thank you very much!!!
Glad I could help - thanx for the grade! :^)
Open in new window