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>