Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re^2: Display shortened paragraph

by Anonymous Monk
on Feb 01, 2006 at 06:09 UTC ( #526974=note: print w/replies, xml ) Need Help??

in reply to Re: Display shortened paragraph
in thread Display shortened paragraph

hi! works, but how would i shorten the paragraph so that it does not cut off a word if it reaches the max char. limit? for example..."just wondering how..." compared to "just wonder h..." ---notice how it cuts off the "ow" in "how"....thanks

Replies are listed 'Best First'.
Re^3: Display shortened paragraph
by graff (Chancellor) on Feb 01, 2006 at 07:00 UTC
    Since people have shown how the use of a regex approach tends to be slower, here's a way to observe word boundaries (well, spaces between words, anyway) without using a regex:
    my $maxlen = 20; my $longtext = "This is some very long string that needs to be truncat +ed to $maxlen characters..."; my $trunctext = substr( $longtext, 0, rindex( $longtext, " ", $maxlen +)); print "$longtext\n$trunctext\n";
    The rindex function, like substr, is faster than a regex match.
Re^3: Display shortened paragraph
by jbrugger (Parson) on Feb 01, 2006 at 06:14 UTC
    By using duff's solution with the Matching the word boundary \b so that you don't chop off the text in the middle of a word.

    A clumsy other way to do this :)
    use strict; use warnings; my $txt = "just wondering how i can have perl display part of my long +memo. basically i want the first lets say 255 charachters of the para +graph. im really new to perl so i don't know how i would come about t +his? a regex perhaps? just started reading about that today. so basic +ally something like"; my @a = split("",$txt); my $l = 7; for (my $i=0; $i < $l; $i++) { print $a[$i]; $l++ if ($i ==($l-1) && ($a[$i] ne " " )) ; }

    "We all agree on the necessity of compromise. We just can't agree on when it's necessary to compromise." - Larry Wall.
      i meant by code given by duff, not graff :)
Re^3: Display shortened paragraph
by Anonymous Monk on Feb 01, 2006 at 06:18 UTC
    actually the code given by graff works just fine:

    my $max = 230; (my $copy = $string) =~ s/(.{1,$max})\b.*/$1.../; print "$copy\n";

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://526974]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2018-06-23 03:09 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (125 votes). Check out past polls.