Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Match integer or floating point numbers, then parse triplets

by metaperl (Curate)
on Sep 14, 2011 at 19:08 UTC ( [id://925981]=perlquestion: print w/replies, xml ) Need Help??

metaperl has asked for the wisdom of the Perl Monks concerning the following question:

I'm surprised there arent plenty of nodes of info on matching any type of number. But anyway, my problem has 2 steps

GOAL 1

# have $1 contain everything but the leading "0:" # and the trailing ",$intOrFloat" ... in this case ",4.00" # http://search.cpan.org/~nwclark/perl-5.8.3/pod/perlretut.pod $intOrFloat = qr/^[+-]?\ *(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/; $_ = "0:20,1.00,g,1.00;65,4.00,g,4.00"; /0:(.)+,$intOrFloat/ and warn $1;
# (for some reason $intOrFloat is not matching)

GOAL 2

# $1 contains a series of triplets separated by semicolons # Each triplet consists of price,quantity,unit_of_measure # The goal is to create an array of hashrefs with this data: # { price => ..., quantity => ..., unit_of_measure => ... }

Replies are listed 'Best First'.
Re: Match integer or floating point numbers, then parse triplets
by Corion (Patriarch) on Sep 14, 2011 at 19:11 UTC

    Maybe you want to use a CSV parser instead? Text::CSV_XS?

    Also, (.)+ does not do what you seem to think it does. Maybe (.+) does more of what you want?

      $intOrFloat = qr/^[+-]?\ *(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;

      metaperl:
      Also note that the definition of  $intOrFloat given in the OP requires that the integer or float be the only thing in the string (i.e., it must start at the start  ^ and end at the  $ end), and the example string given in the OP
          $_  = "0:20,1.00,g,1.00;65,4.00,g,4.00";
      and the pattern used to match it
          /0:(.)+,$intOrFloat/
      both have other stuff at the start.

      Update: metaperl: Good luck with your homework assignment.

Re: Match integer or floating point numbers, then parse triplets
by metaperl (Curate) on Sep 14, 2011 at 20:04 UTC

      "The cake is a lie."

      True laziness is hard work

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://925981]
Approved by Old_Gray_Bear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2024-04-24 08:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found