Hi all,

I need some help. I have name/value parameters coming in from a web form that look something like this (blank lines added for clarity):

        firstname=bill
        lastname=stephenson

        q1=1
        t1=y
        d1=something 1
        p1=3.45

        q2=
        t2=y
        d2=something 2
        p2=1.90

        q3=
        t3=y
        d3=
        p3=

        q4=1
        t4=y
        d4=something 3
        p4=12

        q5=
        t5=y
        d5=
        p5=

        q6=3
        t6=y
        d6=something 4
        p6=1.22

        id_number=10000259
        action=none

I want to remove the groups of data that look like "q3-p3" and "q5-p5" (where "q","d", and "p" are all empty, "t" will always have data) then re-number the groups that contain data in in at least one of the "q","d", or "p" variables, then save them to a file that looks something like this:

        firstname=bill
        lastname=stephenson

        q1=1
        t1=y
        d1=something 1
        p1=3.45

        q2=
        t2=y
        d2=something 2
        p2=1.90

        q3=1
        t3=y
        d3=something 3
        p3=12

        q4=3
        t4=y
        d4=something 4
        p4=1.22

        id_number=10000259
        action=none

I'm having trouble with the logic that will accomplish this. It doesn't seem like it should be very hard to do, but I just can't seem to say it in "perl".

Below is a script that I've been playing with that does output what I want, but it's pretty clunky and probably not very efficient. There must be a better way.

Thanks,

Bill Stephenson

############# start code below #############
#!/usr/bin/perl

use strict;
use CGI qw/:standard/;
use CGI::Carp('fatalsToBrowser');

# Create a new CGI Object for the form input
my $Q = new CGI;

# This represents how the app will receive data from the browser...

#print this
$Q->param('firstname' ,"Bill");
$Q->param('lastname' , "Stephenson");

#print this
$Q->param('q1' ,"");
$Q->param('t1' , "Y");
$Q->param('d1' , "12");
$Q->param('p1' , "12");

#print this
$Q->param('q2' , "13");
$Q->param('t2' , "Y");
$Q->param('d2' , "");
$Q->param('p2' , "13");

#print this
$Q->param('q3' , "16");
$Q->param('t3' , "Y");
$Q->param('d3' , "16");
$Q->param('p3' , "");

#do NOT print this
$Q->param('q4' , "");
$Q->param('t4' , "Y");
$Q->param('d4' , "");
$Q->param('p4' , "");

#print this
$Q->param('q5' , "15");
$Q->param('t5' , "Y");
$Q->param('d5' , "15");
$Q->param('p5' , "15");

#do NOT print this
$Q->param('q6' , "");
$Q->param('t6' , "Y");
$Q->param('d6' , "");
$Q->param('p6' , "");

#print this
$Q->param('q7' , "22");
$Q->param('t7' , "Y");
$Q->param('d7' , "");
$Q->param('p7' , "22");

#do NOT print this
$Q->param('q8' , "");
$Q->param('t8' , "Y");
$Q->param('d8' , "");
$Q->param('p8' , "");

#print this
$Q->param('q9' , "");
$Q->param('t9' , "Y");
$Q->param('d9' , "1000");
$Q->param('p9' , "1000");

#do NOT print this
$Q->param('q10' , "");
$Q->param('t10' , "Y");
$Q->param('d10' , "");
$Q->param('p10' , "");

#print this
$Q->param('send_email' , "yes");
$Q->param('doc_number' , "55");

# This is what we want to print...

# q1=
# t1=Y
# d1=12
# p1=12
# q2=13
# t2=Y
# d2=
# p2=13
# q3=16
# t3=Y
# d3=16
# p3=
# q4=15
# t4=Y
# d4=15
# p4=15
# q5=22
# t5=Y
# d5=
# p5=22
# q6=
# t6=Y
# d6=1000
# p6=1000
# firstname=Bill
# lastname=Stephenson
# send_email=yes
# doc_number=55

#######################################
# put all the invoice parameters names
# into an array...
#######################################
my @invoice_info = $Q->param;

# Declare some variables

my $line_counter="1";
my $row_counter="1";
my $total_rows="10";

# first we print the numbered rows that contain some data...

     while ($line_counter < $total_rows) {

            my $quantity=$Q->param("q$line_counter");

            my $tax=$Q->param("t$line_counter");

            my $description=$Q->param("d$line_counter");

            my $unit_price=$Q->param("p$line_counter");


if ($quantity eq "" && $description eq "" && $unit_price eq "") {

# do nothing

}


                 else {

                     print "q$row_counter=$quantity\n";
                     print "t$row_counter=$tax\n";
                     print "d$row_counter=$description\n";
                     print "p$row_counter=$unit_price\n";

                     $row_counter++;

                      }

                  $line_counter++;

           } # end while loop


# reset the line counter...

$line_counter="1";


# Then we get all the other parameters that are not numbered rows of data.


        foreach my $invoice_item (@invoice_info) {
        
         my $value = $Q->param($invoice_item);
        
        
                if ($invoice_item eq "q$line_counter") {
        
                        next;
        
                }
                        
                if ($invoice_item eq "t$line_counter") {
        
                        next;
        
                }
                        
        
                if ($invoice_item eq "d$line_counter") {
        
                        next;
        
                }
                                
                                
                if ($invoice_item eq "p$line_counter") {
        
                        next:  # <- Notice this is not a semi-colon ";"
                               # It is a colon ":". It will not work with a semi-colon 
";".
                               # I don't know why.
        
                }
        
        
                else  {
        
                        print "$invoice_item=$value\n";                       
        
                next;
        
                }
        
        
         $line_counter++;
        
        
        } # end foreach loop
        
############# end code #############


-- 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