Thank you. This works well. I will put this routine in a sub that
takes $paraIN, $linelength and $linefeed as parameters and return
$paraOUT.

One other thing I would like is to respect the original spacing
between words. So I am able to re-create $paraIN from $paraOUT by
removing any embedded $linefeed characters. Any ideas?

On Sat, 19 Oct 2002 12:48:22 +1000, [EMAIL PROTECTED]
(Colin Johnstone) wrote:

>Hi Chris,
>
>I had to do something similar I am producing a text newsletter I do not want my lines 
>of text in each paragraph to exceed 75 characters. Basically you take your string of 
>text and assign the full words to an array you can use the split function to do this. 
>So now you've got your array of words, you just loop through this constructing the 
>sentences to the required length then you output a carriage return '\n' or a <br> 
>depending on the display medium. Start over again until there are no more words left 
>in the array. Anyway take what you need from my code below.
>
>#!/usr/bin/perl
>
>print "Content-Type: text/html\n\n";
>
>#sample headings
>@arrHeadings[0] = "School is in at the Australian National Field Days";
>@arrHeadings[1] = "Wiggles' colourful splash to Minister's swim scheme launch";
>@arrHeadings[2] = "Student's raise \$81,000 for Stewart House ";
>
>#sample paragraphs
>@arrParas[0] = "Public schools are adding a new dimension at Orange's Australian 
>National Field Days - long recognised as a leading educational resource for farmers.";
>@arrParas[1] = "Popular international children's entertainers, The Wiggles, added a 
>splash of colour when the Minister for Education and Training, John Watkins, launched 
>the 2002 School Swimming Scheme.";
>@arrParas[2] = "Public school students throughout NSW and the ACT have excelled in 
>their fundraising for the Stewart House charity this year, raising \$81,000 in the 
>annual Stewart House Donation Drive raffle.";
>
>#initialise output string to "";
>my $strOutput = "";
>while( @arrHeadings ){
>  #assign the first element of array headings to $heading
>  my $heading = shift(@arrHeadings);
>  #I want to put a space between each paragraph
>  if($strOutput ne ""){
>    $strOutput .= "<br>";
>  }
>  #add the heading to the output string
>  $strOutput .= "\>\> $heading<br>";
>  #assign the first element of array paragraphs to $para
>  my $para = shift(@arrParas);
>  #test length of $para if less than 75 characters then I don't need
>  #to manipulate it, I just add it to the output string.
>  if(length($para)<=75){
>    $strOutput .= "$para<br>";
>  }
>  #because length of $para > 75 I need to wrap each line
>  #firstly I break each line up into its component words
>  elsif(length($para)>75){
>    my $line = "";
>    my @arrWords = split( / /, $para);
>    #loop wile elements in array words
>    while(@arrWords){
>      #get and remove first element of arrwords
>      $word = shift(@arrWords);
>      if((length($line)+length($word))<=75){
>        $line .= "$word ";
>      }
>      elsif((length($line)+length($word))>75){
>        $strOutput .= "$line<br>";
>        $line = "";
>        $line .= "$word ";
>      }
>    }
>    #I have jumped out of the loop but is their elements in $line that
>    #need to be added to #strOutput
>    if(length($line)>0){
>      $strOutput .= "$line<br>";
>    }
>  }
>}
>
>print "$strOutput";
>
>It worked for me, I hope it works for you.
>
>Colin Johnstone
>Website Project Officer
>Corporate Website Unit
>NSW Department of Education And Training
>AUSTRALIA
>
>
>-----Original Message-----
>From: chris [mailto:chris@;home.com]
>Sent: Saturday, October 19, 2002 11:43
>To: [EMAIL PROTECTED]
>Subject: How to wrap a sentence?
>
>
>Given a lengthy string of words, I need to limit the line length and
>wrap it into multiple lines by introducing line breaks. Do not care
>about sentence or paragraph format, just respect full words.
>
>How do I do this?


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

Reply via email to