Tim Sargent wrote:
> 
> Hello -

Hello,

>    I'm attempting to develop a simple script that will read a text file and
> turn it into an HTML page for me.  It's not CGI - I run the script from the
> command line and then upload the resultant file to the web server.
> 
>    In a nutshell, within this text file certain words have a specific color
> or style assigned to them.  What I want to do is be able to read a line a
> time, and make all the changes to the line (if any) without altering the
> actual spacing of the lines.  For example:
> 
>    Unaltered (straight text) line:
>    -------------------------------
>    GS5 launches 3 plasma torpedoes (GS5.p1-3), warhead strength 20, speed
> 32,
> 
>    Formatted line:
>    ---------------
>    <SPAN CLASS="green">GS5</SPAN> <SPAN CLASS="launch">launches</SPAN> 3
> plasma torpedoes (<SPAN CLASS="green-atu">GS5.p1-3</SPAN>), warhead strength
> 20, speed 32,
> 
>     Currently I'm using a bunch of IF statements to try and find these
> words, but it has difficulty with duplicate words in the same line (which is
> a legal occurence for the page), and words that contain other words (like
> GS5.p1-3 contains GS5).
> 
>     Code sample follows:
> 
>     if ($line =~ /\s+([BS]\d{1,2})\s+) {
>       $newText = "<SPAN CLASS="blue">$1</SPAN>";
>       $line =~ s/$1/$newText/g;
>     }
> 
>     and so forth.  I'd prefer an efficient and neat method to do all this,
> but am rather stuck.  Any pointers that can get me started down the right
> path would be greatly appreciated...I know there's an answer out there, I'm
> just having a devil of a time finding it.  Sorry for the lengthy post.


First of all your code sample could be written as:

$line =~ s-\s+([BS]\d{1,2})\s+-<SPAN CLASS="blue">$1</SPAN>-g;

In other words, there is no point in using an if statement to find a
match and then doing a substitution when a substitution itself will do
the job.

Second, if all your search words are unique I would use a hash.

my %lookup = (
    'GS5'      => 'green',
    'launches' => 'launch',
    'GS5.p1-3' => 'green-atu',
    );

for my $word ( sort { length $b <=> length $a } keys %lookup ) {
    $line =~ s[(?:\A|\b)\Q$word\E(?:\b|\Z)]
              [<SPAN CLASS="$lookup{$word}">$word</SPAN>]g;
    }



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to