On Mon, 18 Apr 2005 15:30:39 -0400, Jay Savage wrote
> On 4/18/05, Keith Worthington <[EMAIL PROTECTED]> wrote:
> > Hi All,
> > 
> > I am new to the list and need some quick help.  I have been
> > kicking around with vi and sed for years but never took the
> > time to learn Perl.  Now I need to use Perl and could really
> > use a jumpstart.
> > 
> > I am writing a function in the Postgresql database using Perl
> > because of its text processing power.  My other options are
> > less than pretty. :-(
> > 
> > I will be 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' Rope
> >     Color:Yellow Joint Color:Red
> >  1250 HTPP Black Bonded 2in sq Border: RMFP025BK Size: 39" X 100'
> >     Tag:  None
> >  1250 HTPP Black Bonded 2in sq Border: RMFP025BK Size: 83" X 40'
> >     Tag:  None
> >  3000 HTPP Black 4in sq Border:  WNY200BK Size:  16'6" x 21'3"
> >     Tag:  None
> >  250 HTPP Black 1in sq Border:  TW84NTBK Size:  9' x 25'
> >     Tag:  200' sec
> >  1250 HTPP Yellow 2in sq Border: TW84NYYL Size: 6'1" x 12'7"
> >     Tag:  1855mm x 3840mm
> > 
> > I need to parse them up into the pieces Border, Size and Tag.
> > Furthermore I need to break up the Size piece into width and 
> > length components, feet and inches.
> > 
> > Using the first example I would like to obtain:
> > 'RMFP025BK'
> > 7
> > 10
> > 16
> > 0
> > '' (or NULL)
> > 
> > Any help would be appreciated.
> > 
> > Kind Regards,
> > Keith
> >
> 
> Is this the data you expect to get out of the database...or data from
> somewhere else that you're going to insert into the 
> database...or...? Becuase at the moment it doesn't really look like 
> a database problem. We need some more here, including some sample 
> code.  What are you doing, and where is it going wrong?
> 
> As far as quickstarts go, for database work, the two sources Chris
> mentioned are really the place to go.  For a general perl
> intoductions, the first place to go is perldoc perlfaq, man perl, and
> perldoc perlintro, and the best printed resourse is by far _Learning
> Perl, 3rd Ed._ from O'Reilly.  It's short and shout get you up and
> running in about a day, depending on your general programming ability.
> 
> As for your specific question, you'll want to use some kind of 
> regex. The following should give you some ideas and show a fairly perlish
> appraoch to variable declarations, but this is just an example.  The
> perl motto is "There's more than one way to do it."  How you end up
> storing the data into variables will hopefully be deterined by what
> you ultimately want to do with it.
> 
> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> 
> my $data = "815 HTPP Black 2in sq Border: RMFP025BK Size: 7'10\" x 
> 16' Tag: None" ;
> 
> $data =~ /.*Border: (.*) Size: (.*) Tag: (.*)$/;
> 
> my ($border, $size, $tag) = ($1, $2, $3) ;
> 
> my ($length, $width) = split / x /, $size ;
> 
> my (%length, %width);
> 
> ($length{feet}, $length{inches}) = split /(?:'|")/, $length ;
> 
> ($width{feet}, $width{inches}) = split /(?:'|")/, $width ;
> 
> print
$border\n$length{feet}\n$length{inches}\n$width{feet}\n$width{inches}\n$tag\n";
> 

Jay,

Thanks very much for your post.

I have been banging my head against the wall and based on what I have been
able to read in the last hour or so I have come up with the following code.

#!/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_tag = $_;

#  Echo out the input line.
   print "Just read in this line: $_";
#  Print out the border.
   if (/(?i)border:.*size.*tag:.*/){
      print "properly formatted\n";
      $v_border_id =~ s/.*(?i)border:[   ]*//;
      $v_border_id =~ s/[        ]*(?i)size:.*//;
      print "Border ID:  $v_border_id";
      $v_size =~ s/.*(?i)size:[  ]*//;
      $v_size =~ s/[     ]*(?i)tag:.*//;
      print "Size string:  $v_size";
      $v_tag =~ s/.*(?i)tag:[    ]*//;

At the moment I am just processing a text file to get the hang of how to munge
data with perl.  Eventually I will be creating a function inside a postgresql
database.  It sort of works like this:

CREATE OR REPLACE FUNCTION interface.func_parse_description("varchar")
  RETURNS varchar AS
$BODY$
   < perl statements>
$BODY$
  LANGUAGE 'plperl' STABLE STRICT;

If your curious this page will give you more details about what I am trying to
do.  http://www.postgresql.org/docs/8.0/interactive/plperl.html

I can see from your post that there are lots better ways to accomplish what I
need.  Although at the moment the example you sent is largely beyond me I will
try to implement some of your suggestions and see what happens.

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