laziness, impatience, and hubris PerlMonks

Counting characters in a string

by TASdvlper (Monk)
 on Feb 06, 2004 at 14:34 UTC ( #327079=perlquestion: print w/ replies, xml ) Need Help??
TASdvlper has asked for the wisdom of the Perl Monks concerning the following question:

All,

I've read some of the threads here on counting characters in a string, and I got some good information, but not quite all the answers I was looking for. Say I have a string:

my $string = "this is just a test\nthis is another test\nthis is yet a +nother test\n"; [download] What I want to do is print n-amount of characters then start a new line. So, say n = 5 (where n is actually a variable). The output would be: this(space) is ju st a t est\nt this(space) is an ... an so on ... [download] any thoughts on this ??? Comment on Counting characters in a string Select or Download Code Replies are listed 'Best First'. Re: Counting characters in a string by duff (Vicar) on Feb 06, 2004 at 14:41 UTC my$str = "this is just a test\nthis is another test\nthis is yet anot
+her test\n";
$str =~ s/(.{5})/$1\n/sg;
print $str; [download] But that actually outputs: ---start output--- this is ju st a test this is an other test this is y et an other test ---end output--- [download] Which isn't what your example showed, but is what you asked for. Re: Counting characters in a string by Sol-Invictus (Scribe) on Feb 06, 2004 at 15:15 UTC In other words you want to wrap your string ? #!perl-w use Text::Wrap;$string = "this is just a test\nthis is another test\nthis is yet a no
+ther test\n";

$Text::Wrap::columns = 4; print wrap('', '',$string);
[download]

You spend twenty years learning the spell that makes nude virgins appear in your bedroom, and then you're so poisoned by quicksilver fumes and half-blind from reading old grimoires that you can't remember what happens next.

Re: Counting characters in a string
by Roy Johnson (Monsignor) on Feb 06, 2004 at 14:39 UTC
my $c_per_line = 5; print "$1\n" while ($string =~ /(.{0,$c_per_line})/sg);
[download]
Update: added "0," so that the match would include the final few characters.

The PerlMonk tr/// Advocate
Re: Counting characters in a string
by valentin (Abbot) on Feb 06, 2004 at 14:40 UTC
print map { "$_\n" }$string =~ /.{1,5}/g;
[download]
That will stop at every newline and continue again after it:
$perl -we'$string = "abcdef\nghijk\nlmno\npqr\nst\nu";
> print map { "$_\n" }$string =~ /.{1,5}/g;'
abcde
f
ghijk
lmno
pqr
st
u
[download]
You either want the //s flag on the match or some other way of dealing with newlines.
thanks, you are right //s is fine for me.
Re: Counting characters in a string
by duff (Vicar) on Feb 06, 2004 at 15:06 UTC

Here's another method if you're running perl 5.8.0 or better:

$str = "this is just a test\nthis is another test\nthis is yet another + test\n"; open F, "<", \$str or die;  # open a handle to our string
$/ = \5; # Read 5 characters at a time while (<F>) { # Read 'em! print "$_\n";
}
[download]
Re: Counting characters in a string
by arden (Curate) on Feb 06, 2004 at 14:43 UTC
Wow, this smells like homework. :)
Anyway, you could split the string into an array of single characteres and print off each element within a loop adding a "\n" every five characters.
You could use substr and print five character slices plus a "\n" until you get to the end of the string.
You could make a format, but that's not as fun IMHO.

So, what have you tried so far TASdvlper?

Re: Counting characters in a string
by ysth (Canon) on Feb 06, 2004 at 16:28 UTC
I'm not sure what you are expecting when you have a newline in the input. From your example, it would seem that you want to put a backslash and 'n' in the output, or perhaps to put a newline in the output and have it count as perhaps either one or two characters.

If what you want is the former, this is how I would do it (it will escape all other non-printable characters as well).

$perl -w my$string = "this is just a test\nthis is another test\nthis is yet a
+nother test\n";
use Data::Dumper;
{
local $Data::Dumper::Terse = 1; local$Data::Dumper::Useqq = 1;
local $, = "\n"; print substr(Dumper($string),1,-2)=~/.{1,5}/gs;
}
__END__
this
is ju
st a
test\
nthis
is a
nothe
r tes
t\nth
is is
yet
anoth
er te
st\n
[download]
Golf?: Counting characters in a string
by mr_mischief (Monsignor) on Feb 06, 2004 at 16:01 UTC
perl -pe'$_=join"\n",/.{0,5}/g' Update 20040205 @ 1020 US/CST: or perl -pe's/(.{1,5})/$1\n/g'

which is even shorter...

Christopher E. Stith
Re: Counting characters in a string
by xenchu (Friar) on Feb 06, 2004 at 14:38 UTC

What is your question?

The Needs of the World and my Talents run parallel to infinity.

Log In?
 Username: Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://327079]
Approved by DaWolf
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (9)
As of 2016-02-08 15:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?