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=noneI 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=noneI'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>
