johnirl has asked for the wisdom of the Perl Monks concerning the following question:

Hey Monks
With regard to this question my current effort is this which is unforunatly still not working. I am sure I am missing something elementrary and would appreciate it if someone could point it out to me.
Thanks
#!/usr/bin/perl use strict; my @views = ( 'view0', 'view1'); my $num_of_views = scalar(@views); my %hash; my @global_include = ("size, buffersize, value", "size, buffersize, va +lue"); my $lastview; my $output; for (my $j = 0; $j < $num_of_views; $j++){ my @array = split (", ",$global_include[$j]); pop @array; $hash{$j} = \@array; } #for (my $j = 0; $j < $num_of_views; $j++){ # my $ref = $hash{$j}; # print "HASH CONTAINS FOR $j: "; # foreach (@$ref){ # print "$_\n"; # } #} foreach my $key (sort(keys %hash)){ # Do this only the first time. if(not defined($lastview)){ $lastview = $key; $output = "$key"; next; } $output .= " full outer join $key on "; my $i; my $array_elements_used = scalar(@{ $hash{$key} })-1; #loop through all of the elements except for the last for($i=0;$i<$array_elements_used;$i++){ $output .= "$lastview.$hash{$lastview}[$i] = $key.$hash{$key}[$i]" +; # only add an "and" if this is not the last element used. $output .= " and " if ($i != ($array_elements_used-1)); } $lastview = $key; } print $output, "\n";

j o h n i r l .

Sum day soon I'Il lern how 2 spelI (nad tYpe)

Replies are listed 'Best First'.
Re: Using hash elements to create an SQL Statemant
by kabel (Chaplain) on Sep 11, 2002 at 09:26 UTC
    i did not work through the logic, but if you replace
    for (my $j = 0; $j < $num_of_views; $j++){ my @array = split (", ",$global_include[$j]); pop @array; $hash{$j} = \@array; }
    with
    for (my $j = 0; $j < $num_of_views; $j++){ my @array = split (", ",$global_include[$j]); pop @array; $hash{$views[$j]} = \@array; }
    it just looks pretty good ;). and if you want to print out a data structure use the package Data::Dumper, that safes you lots of work.
Re: Using hash elements to create an SQL Statemant
by BigD (Scribe) on Sep 11, 2002 at 11:44 UTC
    The new code should look like:
    use strict; my @views = ( 'view0', 'view1', 'view3'); my $num_of_views = scalar(@views); my %hash; my @global_include = ("buffersize, size, value, speed", "buffersize, s +ize, value, speed","buffersize, size, value, speed"); my $lastview; my $output; for (my $j = 0; $j < $num_of_views; $j++){ my @array = split (", ",$global_include[$j]); pop @array; $hash{$views[$j]} = \@array; } foreach my $key (sort(keys %hash)){ # Do this only the first time. if(not defined($lastview)){ $lastview = $key; $output = "$key"; next; } $output .= " full outer join $key on "; my $i; my $array_elements_used = @{$hash{$key}}-1; #loop through all of the elements, including the last since you ha +ve removed it in the pop before!! for($i=0;$i<=$array_elements_used;$i++){ $output .= "$lastview.$hash{$lastview}[$i] = $key.$hash{$key}[$i +]"; # only add an "and" if this is not the last element used. $output .= " and " if ($i != $array_elements_used); } $lastview = $key; } print $output, "\n";
    Only notice that the array is different because before you did not want the last element, but know, you remove the last element of the array in the  pop @array, so you do not have to skip the last element. Daniel.