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]