page title in a list of recently updated pages

G

Guest

Hi there,

I'm using VBScript to display a list of the ten most recently updated
pages on my web site. Right now, the script lists the filenames and
the date modified in a given directory.

What I want to know is if there is any way to extract the page title
and display that instead of the file name? Can I use .asp and VBscript
to "delve" into the file and extract the title?

Here's the code I'm using:
<%
folder = ".\"
set fso = CreateObject("Scripting.fileSystemObject")
set fold = fso.getFolder(Server.MapPath(folder))
fileCount = fold.files.count
dim fNames(), fDates()
redim fNames(fileCount), fDates(fileCount)
cFcount = 0
for each file in fold.files
cFcount = cFcount + 1
fNames(cFcount) = lcase(file.name)
fDates(cFcount) = file.dateLastModified
next
for tName = 1 to fileCount
for nName = (tName + 1) to fileCount
if (fDates(tName) < fDates(nName)) then
buffer = fNames(nName)
dateBuffer = fDates(nName)
fNames(nName) = fNames(tName)
fDates(nName) = fDates(tName)
fNames(tName) = buffer
fDates(tName) = dateBuffer
end if
next
next
if (fileCount > 10) then
fileCount = 10
End If
Response.Write "<table border=1 width='90%'>"
for i = 1 to fileCount
Response.Write "<tr><td><a href='" & fNames(i) & "'>" &
fNames(i) & "</a></td><td>" & fDates(i) & "</td></tr>"
next
Response.Write "</table>"
%>
 
M

Mike Brind

Hi there,

I'm using VBScript to display a list of the ten most recently updated
pages on my web site. Right now, the script lists the filenames and
the date modified in a given directory.

What I want to know is if there is any way to extract the page title
and display that instead of the file name? Can I use .asp and VBscript
to "delve" into the file and extract the title?

Here's the code I'm using:
<%
folder = ".\"
set fso = CreateObject("Scripting.fileSystemObject")
set fold = fso.getFolder(Server.MapPath(folder))
fileCount = fold.files.count
dim fNames(), fDates()
redim fNames(fileCount), fDates(fileCount)
cFcount = 0
for each file in fold.files
cFcount = cFcount + 1
fNames(cFcount) = lcase(file.name)
fDates(cFcount) = file.dateLastModified
next
for tName = 1 to fileCount
for nName = (tName + 1) to fileCount
if (fDates(tName) < fDates(nName)) then
buffer = fNames(nName)
dateBuffer = fDates(nName)
fNames(nName) = fNames(tName)
fDates(nName) = fDates(tName)
fNames(tName) = buffer
fDates(tName) = dateBuffer
end if
next
next
if (fileCount > 10) then
fileCount = 10
End If
Response.Write "<table border=1 width='90%'>"
for i = 1 to fileCount
Response.Write "<tr><td><a href='" & fNames(i) & "'>" &
fNames(i) & "</a></td><td>" & fDates(i) & "</td></tr>"
next
Response.Write "</table>"
%>

Yes. You can use the Scripting.FileSystemObject to read the contents
of an asp file, and then a regular expression to get the title. Here's
one that opens a file in the same folder and finds the title. It
assumes that you will only have letters, numbers or spaces in the
title:

<%
Dim objFSO, objTextStream, strSearchOn, objMatch, colmatches, mymatch
Dim strFileName
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
strFileName = Server.Mappath("filename.asp")
const fsoForReading = 1
Set objTextStream = objFSO.OpenTextFile(strFileName, fsoForReading)
strSearchOn = objTextStream.ReadAll
Set objRegExpr = New regexp
objRegExpr.Pattern = "<title>[\w\d\s]*<"
objRegExpr.Global = True
objRegExpr.IgnoreCase = True
set colmatches = objRegExpr.Execute(strSearchOn)
For Each objMatch in colMatches
mymatch = replace(objMatch.Value,"<title>","")
mymatch = replace(mymatch,"<","")
Next
Response.Write mymatch
objTextStream.Close
Set objTextStream = Nothing
Set objFSO = Nothing
%>
 
G

Guest

Thanks Mike! I was able to insert that script into my code to give me
exactly what I want! One last thing - is there any way to allow dashes
in the title?
 
M

Mike Brind

Thanks Mike! I was able to insert that script into my code to give me
exactly what I want! One last thing - is there any way to allow dashes
in the title?

Yes. Add \- to the pattern within the square brackets, so the line
should read:

objRegExpr.Pattern = "<title>[\w\d\s\-]*<"

Hyphens/Dashes need to be escaped with a backslash because it's one of
the special characters. The pattern above first looks for the text
<title>, followed by any word character or digit or whitespace or dash
appearing 0 or more times before an opened angle bracket.

If you find you need to add more options (double colons :: seem to be
the rave with some people), have a look at this article:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting051099.asp
 
E

Evertjan.

Mike Brind wrote on 20 apr 2006 in microsoft.public.inetserver.asp.general:
Yes. Add \- to the pattern within the square brackets, so the line
should read:

objRegExpr.Pattern = "<title>[\w\d\s\-]*<"

Why not more general:

"<title>[^<]*<"

?
 
G

Guest

Thanks Mike! I was able to insert that script into my code to give me
exactly what I want! One last thing - is there any way to allow dashes
in the title?

Oops, never mind, I just solved it:

Replace
objRegExpr.Pattern = "<title>[\w\d\s]*<"

With
objRegExpr.Pattern = "<title>[\w\d\s\x2D]*<"

Thanks again!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top