Solved

Replace line of text on numerous files at once...

Posted on 2007-04-05
20
232 Views
Last Modified: 2010-04-16
Looking for a script that can search a folder for all files with extension ".htm"

If it finds one, then it would need to search within this file for a specific line number...

IE: open the file in notepad, Edit>Go To and type in the number.

The number of the line would be specified in the script. Lets say for example it would be line 10 (same for all of the files)...

Once its found this line, I'd like it to replace it with specific text I specify.

Many thanks in advance!
0
Comment
Question by:Alan-Yeo
  • 10
  • 8
  • 2
20 Comments
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858095
Untested, but this should work - please run it against test data first...

Dim objFile
Dim objFSO:Set objFSO=CreateObject("Scripting.FileSystemObject")
Dim objFolder=objFSO.GetFolder("C:\MyFolder\")
strLineNumber=10
strNewData="This is the replaced text"
For Each File in objFolder.Files
  If lCase(objFSO.GetExtensionName(file.name))="htm" Then
    set objFile=CreateTextFile(Replace(file.path,".htm",".work"))
    arrData=Split(objFSO.OpenTextFile(file.path).ReadAll,vbNewLine)
    For x = 0 to strLineNumber - 2
       objFile.WriteLine arrData(x)
    Next
    objFile.WriteLine strNewData
    For x = strLineNumber +1 to ubound(arrData)
      objFile.WriteLine arrData(x)
    Next
    objFile.Close
    objFSO.MoveFile Replace(file.path, ".work",".htm"), file.path
  End If
Next
Set objFolder=Nothing
Set objFSO=Nothing
0
 

Author Comment

by:Alan-Yeo
ID: 18858119
Line: 3
Char: 14
Error: Unexpected end of statement
Code: 800A0401
Source: Microsoft VBScript compilation error
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858196
Dim objFolder=objFSO.GetFolder("C:\MyFolder\")
should read:

Dim objFolder: Set objFolder=objFSO.GetFolder("C:\MyFolder\")
0
 

Author Comment

by:Alan-Yeo
ID: 18858212
Line: 8
Char: 5
Error: Type mismatch: 'CreateTextFile'
Code: 800A00D
Source: Microsoft VBScript Runtime error
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858249
Sorry - change set objFile=CreateTextFile(Replace(file.path,".htm",".work"))
to
set objFile=objFSO.CreateTextFile(Replace(file.path,".htm",".work"))
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858252
I would've tested this first,  if I were at home...sorry about the trouble...
0
 
LVL 4

Expert Comment

by:hclgroup
ID: 18858285
Try this with corrections. Also note that script assume that all files have at least 10 lines.

Dim objFile
Dim objFSO:Set objFSO=CreateObject("Scripting.FileSystemObject")
Dim objFolder:Set objFolder=objFSO.GetFolder("C:\testing\")
strLineNumber=10
strNewData="This is the replaced text"
For Each File in objFolder.Files
  If lCase(objFSO.GetExtensionName(file.name))="htm" Then
    set objFile=objFSO.CreateTextFile(Replace(file.path,".htm",".work"))
    arrData=Split(objFSO.OpenTextFile(file.path).ReadAll,vbNewLine)
    For x = 0 to strLineNumber - 2
       objFile.WriteLine arrData(x)
    Next
    objFile.WriteLine strNewData
    For x = strLineNumber +1 to ubound(arrData)
      objFile.WriteLine arrData(x)
    Next
    objFile.Close
    objFSO.MoveFile Replace(file.path, ".work",".htm"), file.path
  End If
Next
Set objFolder=Nothing
Set objFSO=Nothing
0
 
LVL 4

Expert Comment

by:hclgroup
ID: 18858301
OK, I see that u beat me to the chase. I actually tested it and it works.
0
 

Author Comment

by:Alan-Yeo
ID: 18858311
It does work... however i have a folder full of files with the extension ".work" left over... the original files havn't been modified?
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858372
Flip-flop these two lines then...this will read the file into an array and then create the new file, which simply replaces the existing...

arrData=Split(objFSO.OpenTextFile(file.path).ReadAll,vbNewLine)
set objFile=CreateTextFile(Replace(file.path)
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:Alan-Yeo
ID: 18858429
Sorry to be a pain, could i change it a bit? Instead of searching for line number could I change it so it will search for a small piece of text and its found on a particular line... replace the whole line with the text I specify? Cheeers!
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858493
I believe this will make it simpler actually.

Dim objFile
Dim objFSO:Set objFSO=CreateObject("Scripting.FileSystemObject")
Dim objFolder: Set objFolder=objFSO.GetFolder("C:\MyFolder\")
strOldData="This is the old data"
strNewData="This is the replaced text"
For Each File in objFolder.Files
  If lCase(objFSO.GetExtensionName(file.name))="htm" Then
    Set objFile=objFSO.OpenTextFile(file.path)
    arrData=objFile.ReadAll
    objFile.Close
    Set objFile=objFSO.CreateTextFile(file.path)
    objFile.Write Replace(arrData, strOldData, strNewData)
    objFile.Close
    Set objFile=Nothing
  End If
Next
Set objFolder=Nothing
Set objFSO=Nothing
0
 

Author Comment

by:Alan-Yeo
ID: 18858562
oops! Works, but doesn't replace the whole line?

Example..
line I want to edit reads...

I WOULD LIKE TO REMOVE REMOVE THIS LINE

In the code, I could just put in "I WOULD LIKE" and it would replace the WHOLE line with whatever I specify.

Thanks sirbounty!
0
 
LVL 67

Accepted Solution

by:
sirbounty earned 500 total points
ID: 18858603
You mean you set it up like:
strOldData="I WOULD LIKE TO REMOVE REMOVE THIS LINE"
strNewData="I WOULD LIKE"

and it didn't work?

I wouldn't really want to take it this way, but you could loop through it...

Dim objFile
Dim objFSO:Set objFSO=CreateObject("Scripting.FileSystemObject")
Dim objFolder: Set objFolder=objFSO.GetFolder("C:\MyFolder\")
strOldData="This is the old data"
strNewData="This is the replaced text"
For Each File in objFolder.Files
  If lCase(objFSO.GetExtensionName(file.name))="htm" Then
    arrData=Split(objFSO.OpenTextFile(file.path).ReadAll, vbNewLine)
    Set objFile=objFSO.CreateTextFile(file.path)
    For Each strLine in arrData
      objFile.WriteLine Replace(strLine, strOldData, strNewData)
    Next
    objFile.Close
    Set objFile=Nothing
  End If
Next
Set objFolder=Nothing
Set objFSO=Nothing
0
 

Author Comment

by:Alan-Yeo
ID: 18858645
:( still not replacing the WHOLE line...

The line I want to replace looks like this..
    <td width="50"><img src="http://www.xxxxx.com/emailimages/.jpg" width="50" height="70"></td>

In the vbs script I put this...
strOldData="Industrial2007"
strNewData="<td width="570"><img src="http://www..xxxxx.com/emailimages/signature-bottomimage.bmp" width="570" height="95"></td>"

The line should then look like this...
    <td width="570"><img src="http://www.cbsbutler.com/emailimages/signature-bottomimage.bmp" width="570" height="95"></td>
0
 

Author Comment

by:Alan-Yeo
ID: 18858677
Sorry ignore the above...

The line I want to replace looks like this..
    <td width="50"><img src="http://www.xxxxx.com/emailimages/Industrial.jpg" width="50" height="70"></td>

In the vbs script I put this...
strOldData="Industrial2007"
strNewData="<td width="570"><img src="http://www..xxxxx.com/emailimages/signature-bottomimage.bmp" width="570" height="95"></td>"

The line should then look like this...
    <td width="570"><img src="http://www.xxxxx.com/emailimages/signature-bottomimage.bmp" width="570" height="95"></td>
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858695
Industrial doesn't match Industrial2007 though..?
I'm confused... : \
0
 

Author Comment

by:Alan-Yeo
ID: 18858750
Oopps...

The line I want to replace looks like this..
    <td width="50"><img src="http://www.xxxxx.com/emailimages/Industrial2007.jpg" width="50" height="70"></td>

In the vbs script I put this...
strOldData="Industrial2007"
strNewData="<td width="570"><img src="http://www..xxxxx.com/emailimages/signature-bottomimage.bmp" width="570" height="95"></td>"

The line should then look like this...
    <td width="570"><img src="http://www.xxxxx.com/emailimages/signature-bottomimage.bmp" width="570" height="95"></td>
0
 
LVL 67

Assisted Solution

by:sirbounty
sirbounty earned 500 total points
ID: 18858834
So, you want to change the width from 50 to 570, and the image from Industrial2007 to signature-bottomimage...

You'll need to work around the quotes (")
Try this:

strOldData="<td width=" & chr(34) & "50" & chr(34) & "><img src=" & chr(34) & "http://www.xxxxx.com/emailimages/Industrial2007.jpg" & chr(34) & " width=" & chr(34) & "50" & chr(34) & " height=" & chr(34) & "70" & chr(34) & "></td>"

strNewData="<td width=" & chr(34) & "570" & chr(34) & "><img src=" & chr(34) & "http://www..xxxxx.com/emailimages/signature-bottomimage.bmp" & chr(34) & " width=" & chr(34) & "570" & chr(34) & " height=" & chr(34) & "95" & chr(34) & "></td>"
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18858946
Happy to help, as always! :^)
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

I hope you'll find this tutorial useful and interesting. So let's try to extend Tcl with a new package.  For anyone more deeply interested please check out the book "Practical Programming in Tcl and Tk". It's really one of the best written books abo…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Learn the basics of if, else, and elif statements in Python 2.7. Use "if" statements to test a specified condition.: The structure of an if statement is as follows: (CODE) Use "else" statements to allow the execution of an alternative, if the …
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now