Hi All,

Here is my code so far.  I am really getting frustrated with my inability to
get this right.

I didn't understand Chris' earlier suggestion about using defined but I tried
using it anyway.

I cannot seem to get the pattern match to properly handle a dimension that is
just feet or just inches.

I would really appreciate some pointers on this problem.


#!/usr/bin/env perl 
use strict; 
use warnings; 
 
open(INFILE, "size_input.txt") or die "Can't open input.txt: $!"; 
 
while (<INFILE>) {     # assigns each line in turn to $_ 
   my $v_border_id = ""; 
   my $v_size = ""; 
   my $v_dim1_str = ""; 
   my $v_dim2_str = ""; 
   my $v_tag = ""; 
    
#  Echo out the input line. 
   print "\nInput line:\n   $_"; 
#  Perform a case insensitive check for the proper data format.  Capture the
#  desired parts of the data using parentheses. 
   if (/.*border:\s*(.*)\s*size:\s*(.*)\s*tag:\s*(.*)\s*/i){
#     Store the capture patterns in variables to avoid unpredictable results.
      my ($v_border_str, $v_size_str, $v_tag_str) = ($1, $2, $3);
#     Check for no border.
      if ($v_border_str =~ /none/i){
         $v_border_id = "";
      } else {
         $v_border_id = $v_border_str;
      }
#     Parse up the size string.
      if ($v_size_str =~ /\d+\s*['"]\s*x\s*\d+\s*['"]/i){
#        It looks like a size string so continue to process.
         $v_size = "matched size pattern";
#        Split the size string into its two parts.
         ($v_dim1_str, $v_dim2_str) = split(/\s*x\s*/i, $v_size_str);
#        Now split dimension one into feet and inch parts.
         #my ($v_feet_str, $v_inch_str) = split(/(?:'|")/, $v_dim1_str);
         $v_dim1_str =~ /\s*([\d\.\s\-\/]*)\s*'??\s*([\d\.\s\-\/]*)\s*"??/;
         #my ($v_feet_str, $v_inch_str) = ($1, $2);
         my $v_feet_str = defined $1 ? $1 : 0;
         my $v_inch_str = defined $2 ? $2 : 0;
         print "Dimension 1\n";
         print "   Feet:    $v_feet_str\n";
         print "   Inches:  $v_inch_str\n";
#        Check for fraction in inch string.
         if ($v_inch_str =~ /\//){
#           There is a fraction to deal with.
#           Parse the fraction using whitespace or a hyphen (-) and the
#           forward slash (/) character.
            my ($v_whole_in, $v_numer, $v_denom) = split(/(\s+|-|\/)/,
$v_inch_str);
            print "Whole inches:    $v_whole_in\n";
            print "Numerator:  $v_numer\n";
            print "Denominator:  $v_denom\n";
         }
#     Merge the components of the dimension into a single value.
      # $v_dim1_str_ft * 12 + $v_dim1_str_in
#     Parse up the second dimension.
#     Merge the components of the dimension into a single value.
#     Assign the smaller dimension to width.
#     Assign the larger dimension to length.
      } else {
         $v_size = "didnt match pattern";
      }
#     Check for no tag.
      if ($v_tag_str =~ /none/i){
         $v_tag = "";
      } else {
         $v_tag = $v_tag_str;
      }
   } else {
      #print "bad format\n";
      $v_border_id = "";
      $v_size = "";
      $v_tag = "";
   }
   print "Size string:  $v_size\n";
   print "Dimension 1 string:  $v_dim1_str\n";
   print "Dimension 2 string:  $v_dim2_str\n";
}

close INFILE;

# cat size_input.txt 
Border: None Size:  9' x 25'  Tag: None
Border: None Size:  9' x 30' Tag: None
Border: None Size:  9' x 20' Tag: None
Border: None Size: 6'1" x 12'7" Tag: None
Border: None Size: 7'6" x 12'7" Tag: None
Border: None Size: 7'11" x 12'7" Tag: None
Border: None Size: 12'7" x 14'1" Tag: None
Border: None Size: 4'11" x 6'1" Tag: None
Border: None Size: 7'10" x 16' Tag: None
Border: None Size: 83' X 40" Tag: None
Border: None Size:  17' x 50' Tag: None
Border: None Size: 5' X 90'6" Tag: None
Border: None Size: 39" X 100" Tag: None
Border: None Size:  30" x 12' Tag: None
Border: None Size: 28-3/8" x 14'4" Tag: None
Border: None Size:  16'  6-3/4" x 43" Tag: None
Border: None Size:  21'3 1/2" x 24' Tag: None
Border: None Size:  14'8.5" x 16'7" Tag: None

Kind Regards,
Keith

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