Extracting records

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Dj Frenzy

    Extracting records

    Hi, I am looking for a solution to this problem. I receive a list of
    records like this, in one continuous string. I want to separate each
    record and extract some of the data for each record. The records look
    like this:

    (=YEAR:1991;mon th:[JAN]client-NAME:[Ali-Baba-Basket-Emporium]AREA:[SouthEast]value:[ú1905]=)(=YEAR:1997;m onth:[dec]client-NAME:[Fletcher]AREA:[Scotland(North)]discount:[7%]value:[ú741]=)(=YEAR:2003;m onth:[MAR]client-NAME:[Porridge-dot-com]AREA:[N.Ireland]discount:[7%]value:[ú335]=)

    For example, in this record:
    (=YEAR:2003;mon th:[MAR]client-NAME:[Porridge-dot-com]AREA:[N.Ireland]discount:[7%]value:[ú335]=)

    I want to extract the year: "2003"
    month: "MAR"
    clientName: "Porridge-dot-com"
    area: "N.Ireland"
    discount (which is an optional field): "7"
    value: 335.

    An help in how to do this would be appreciated.
    Cheers,
    Dave
  • Gunnar Hjalmarsson

    #2
    Re: Extracting records

    Dj Frenzy wrote:[color=blue]
    > I receive a list of records like this, in one continuous string. I
    > want to separate each record and extract some of the data for each
    > record. The records look like this:
    >
    > (=YEAR:1991;mon th:[JAN]client-NAME:[Ali-Baba-Basket-Emporium]AREA:[SouthEast]value:[ú1905]=)(=YEAR:1997;m onth:[dec]client-NAME:[Fletcher]AREA:[Scotland(North)]discount:[7%]value:[ú741]=)(=YEAR:2003;m onth:[MAR]client-NAME:[Porridge-dot-com]AREA:[N.Ireland]discount:[7%]value:[ú335]=)
    >
    > For example, in this record:
    > (=YEAR:2003;mon th:[MAR]client-NAME:[Porridge-dot-com]AREA:[N.Ireland]discount:[7%]value:[ú335]=)
    >
    > I want to extract the year: "2003"
    > month: "MAR"
    > clientName: "Porridge-dot-com"
    > area: "N.Ireland"
    > discount (which is an optional field): "7"
    > value: 335.[/color]

    How about:

    my @records;

    for (split /\)\(/) {

    if (/(\d+) # year
    [^\[]+\[
    ([^\]]+) # month
    [^\[]+\[
    ([^\]]+) # clientName
    [^\[]+\[
    ([^\]]+) # area
    (?:
    \]discount:\[
    (\d+) # discount
    )?
    [^\[]+\[\D?
    (\d+) # value
    /x) {

    push @records, {
    year => $1,
    month => $2,
    clientName => $3,
    area => $4,
    discount => ($5 or 0),
    value => $6,
    }
    }
    }

    --
    Gunnar Hjalmarsson
    Email: http://www.gunnar.cc/cgi-bin/contact.pl

    Comment

    Working...