I am trying to generate a toc file, for helpfiles, unfortunately I am getting an error unable to open input file, hoping to get some help as to where the problem lies.
#!/usr/bin/perl -w
#
# To index an entire directory use:
# perl toc.pl *.html
#
use strict;
# holds the name of each file
# as it is being processed.
my($file);
# holds the text of the heading
# (from the anchor tag).
my($heading);
# holds the last heading level
# for comparision.
my($oldLevel);
# holds each line of the file
# as it is being processed.
my($line);
# used as temporary variables
# to shorten script line widths
my($match);
my($href);
# holds the name of the heading
# from the anchor tag.
my($name);
# holds the level of the current heading.
my($newLevel);
# First, I open an output file and print the
# beginning of the HTML that is needed.
#
$outputFile = "fulltoc.htm";
open(OUT, ">",$outputFile) or die "couldn't open outputfile";
print OUT ("<HTML><HEAD><TITLE>");
print OUT ("Detailed Table of Contents\n");
print OUT ("</TITLE></HEAD><BODY>\n");
# Now, loop through every file in the command
# line looking for Header tags. When found, Look
# for an Anchor tag so that the NAME attribute can
# be used. The NAME attribute might be different
# from the actual heading.
#
foreach $file (sort(@ARGV)) {
next if $file =~ m/^\.htm$/i;
print("$file\n");
open(INP,"+>", $file) or die "couldn't open input file";
print OUT ("<UL>\n");
$oldLevel = 1;
while (<INP>) {
if (m!(<H\d>.+?</H\d>)!i) {
# remove anchors from header.
$line = $1;
$match = '<A NAME="(.+?)">(.+?)</A>';
if ($line =~ m!$match!i) {
$name = $1;
$heading = $2;
}
else {
$match = '<H\d>(.+?)</H\d>';
$line =~ m!$match!i;
$name = $1;
$heading = $1;
}
m!<H(\d)>!;
$newLevel = $1;
if ($oldLevel > $newLevel) {
print OUT ("</UL>\n");
}
if ($oldLevel < $newLevel) {
print OUT ("<UL>\n");
}
$oldLevel = $newLevel;
my($href) = "\"$file#$name\"";
print OUT ("<LI>");
print OUT ("<A HREF=$href>");
print OUT ("$heading</A>\n");
}
}
while ($oldLevel--) {
print OUT ("</UL>\n");
}
close(INP);
}
# End the HTML document and close the output file.
#
print OUT ("</BODY></HTML>");
close(OUT);
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|