Thanks, that's just what I was trying to figure out, only I'd gone about 
it with the m// command to little or no avail. Your idea is of course much 
better.

I'll leave you alone for awhile. You given me plenty to think about.

Much appreciated!

Bill J.
__________________________________________________

On Mon, 29 Dec 2003, James Edward Gray II wrote:

> On Dec 29, 2003, at 11:31 AM, Bill Jastram wrote:
> 
> > Bingo! James. That takes care of label issue.
> 
> Good news.  Glad I could help
> 
> > I was even able to make it three columns instead of three. And change 
> > the
> > space between columns.
> 
> Oh no, I've created a monster!  <laughs>
> 
> > You've obviously been at this for a while and use the tightest code 
> > concepts I've seen.
> 
> Na, you need a "Perl Golf Contest" for that.  Thanks for the praise 
> though.
> 
> > By the way, how would you 'search' the incoming file to restrict what 
> > gets
> > displayed? i.e. display only the labels for the Johnson's?
> 
> Well, you're just never satisfied, are you?  <laughs>
> 
> See code below:
> 
> > On Wed, 24 Dec 2003, James Edward Gray II wrote:
> >
> >> On Dec 23, 2003, at 11:29 PM, Bill Jastram wrote:
> >>
> >>> #!/usr/bin/perl
> >>>
> >>> # use with:
> >>> # perl jamescolumnsample testing.txt
> >>>
> >>> use strict;
> >>> use warnings;
> >>>
> >>> #open CON, 'testing.txt' or die "File error:  $!";
> >>>
> >>> #my @CON = <CON> ;
> >>>
> >>> my(@col1, @col2, @col3);
> >>>
> >>> my $col = 1;
> >>> while (<>) {
> >>
> >> I forgot to remove the newlines here and we probably should:
> >>
> >>    chomp;
> 
> We could add filtering pretty easily right here.  I'll use your 
> example, and leave it for you to expand on:
> 
> next unless /^[^\t]+\tJohnson\t/;
> 
> How's that for simple?  If we skip a line here, it'll never get added 
> to the col# arrays and we can forget about it.  That leaves the only 
> task as finding the right lines to skip, or in this case, not skip.
> 
> Your lines are tab delimited and they begin with the first and last 
> name.  So the first chunk of non-tab characters we need to skip, 
> followed by a tab, and then we've found the important part to match.
> 
> Good luck.
> 
> James
> 
> >>>         if ($col == 1) { push @col1, $_ }
> >>>         elsif ($col == 2) { push @col2, $_ }
> >>>         else {
> >>>                 push @col3, $_;
> >>>                 $col = 1;
> >>>                 next;
> >>>         }
> >>>         $col++;
> >>> }
> >>>
> >>> # that should load @col1, @col2 and @col3
> >>> # can you come up with an output loop for them that goes here?
> >>
> >> # col1 will be the last to empty, so loop until it's gone
> >> while (@col1) {
> >>    my(@names, @addresses, @cities);        # make lists for the output lines
> >>    # fill those lists
> >>    foreach (shift(@col1), shift(@col2), shift(@col3)) {
> >>            next unless defined $_;
> >>            my($first, $last, $address, $city, $state, $zip) = split /\t/, $_;
> >>            push @names, "$first $last";
> >>            push @addresses, $address;
> >>            push @cities, "$city, $state  $zip";
> >>    }
> >>
> >>    # print one row of contacts
> >>    foreach ([EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]) {
> >>            printf join(' ', ('%-30s') x scalar(@$_)) . "\n", @$_;
> >>    }
> >>    print "\n" if @col1;    # add a separator
> >> }  # rinse, repeat...
> >>
> >> __END__
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to