in reply to Alignment Program
This approach creates a closure (roughly stated: a state-preserving anonymous subroutine) which you then call to spit out a word at a time for handling. This allows your main loop to focus on building the new lines and to ignore the details of parsing the input and knowing when to read in another line.
#!/usr/bin/perl -w use strict; sub make_word_dispensor { my $infile = shift; open INFILE, "<$infile" or die "Can't open $infile: $!\n"; my @words = (); return sub { unless (@words or (@words = split /\s/, <INFILE>)) { close INFILE; return undef; } return shift @words; } } my $word_dispensor = make_word_dispensor("test.txt"); my $line_length = 50; my $line = ''; while (my $word = &$word_dispensor()) { if (length("$line $word") > $line_length) { print "$line\n"; $line = $word; } else { $line .= ($line ? ' ' : '') . $word; } } print "$line\n";
Season to taste. HTH
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Alignment Program
by Anonymous Monk on May 27, 2001 at 00:08 UTC |