Solved

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

Posted on 2007-04-05
20
231 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
Comment Utility
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
Comment Utility
Line: 3
Char: 14
Error: Unexpected end of statement
Code: 800A0401
Source: Microsoft VBScript compilation error
0
 
LVL 67

Expert Comment

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

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

Author Comment

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

Expert Comment

by:sirbounty
Comment Utility
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
Comment Utility
I would've tested this first,  if I were at home...sorry about the trouble...
0
 
LVL 4

Expert Comment

by:hclgroup
Comment Utility
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
Comment Utility
OK, I see that u beat me to the chase. I actually tested it and it works.
0
 

Author Comment

by:Alan-Yeo
Comment Utility
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
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:Alan-Yeo
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
:( 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
Comment Utility
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
Comment Utility
Industrial doesn't match Industrial2007 though..?
I'm confused... : \
0
 

Author Comment

by:Alan-Yeo
Comment Utility
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
Comment Utility
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
Comment Utility
Happy to help, as always! :^)
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Suggested Solutions

When it comes to writing scripts for a Client/Server computing environment it is essential to consider some way of enabling the authentication functionality within a script. This sort of consideration mainly comes into the picture when we are dealin…
Not long ago I saw a question in the VB Script forum that I thought would not take much time. You can read that question (Question ID  (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_28455246.html)28455246) Here (http…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

762 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

12 Experts available now in Live!

Get 1:1 Help Now