Hi All, Many thanks to Jay for his examples I have now written a perl script that is munging a text file. Eventually I will move the perl code into a function inside a postgresql database.
I am processing inputs like the following: 815 HTPP Black 2in sq Border: RMFP025BK Size: 7'10" x 16' Tag: None 3000 HTPP Black 4in sq Border: WNY200BK Size: 17' x 50' Tag: None 3000 HTPP Black 4in sq Border: WNY200BK Size: 12' x 12'2" Tag: None Netform Lily Pad Net Size: 5' X 32' W & L Body Length:24' 250 HTPP Black 1in sq Border: TW84NTBK Size: 9' x 25' Tag: 200' sec 1250 HTPP Yellow 2in sq Border: None Size: 6'1" x 12'7" Tag: 1855mm x 3840mm Here is the code that I have written so far. #!/usr/bin/env perl use strict; use warnings; open(INFILE, "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_length = ""; my $v_width = ""; my $v_tag = ""; # Echo out the input line. print "\nInput line:\n $_"; # Perform a case insensitive check for the proper data format. #if (/(?i)border:.*size.*tag:.*/){ # Perform a case insensitive check for the proper data format. # Capture the desired parts of the data using parentheses. if (/(?i).*border:[ ]*(.*)[ ]*size:[ ]*(.*)[ ]*tag:[ ]*(.*)[ ]*/){ print "properly formatted\n"; # Check for no border. if ($1 =~ /(?i)none/){ $v_border_id = ""; } else { $v_border_id = $1; } # Parse up the size string. my ($v_length, $v_width) = split(/x/, $2); print split(/(?i)[ ]*x[ ]*/, $2); print "\n"; # Check for no tag. #if ($v_tag =~ /(?i)tag:[ ]*none/){ if ($3 =~ /(?i)none/){ $v_tag = ""; } else { $v_tag = $3; #$v_tag =~ s/.*(?i)tag:[ ]*//; } } else { print "bad format\n"; $v_border_id = ""; $v_size = ""; $v_tag = ""; } print "Border ID: $v_border_id\n"; print "Size string: $2\n"; print "Length string: $v_length\n"; print "Width string: $v_width\n"; print "Tag string: $v_tag\n\n"; } close INFILE; Most of the code seems to be working as expected. I seem to be having a problem with the split command/assignment as the length and width strings are blank. The command is based on Jay's example shown here. > my ($length, $width) = split / x /, $size ; What I really wanted to do was this. my ($v_length, $v_width) = split(/(?i)[ ]*x[ ]*/, $2); So I put the following in the code to try and understand what was going wrong. print split(/(?i)[ ]*x[ ]*/, $2); print "\n"; When I ran the program this is one of the outputs Input line: 1250 HTPP Yellow 2in sq Border: TW84NYYL Size: 4'11" x 6'1" Tag: 1500mm x 1855mm properly formatted 4'11"6'1" Border ID: TW84NYYL Size string: 4'11" x 6'1" Length string: Width string: Tag string: 1500mm x 1855mm What am I doing wrong? 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>