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;month:[JAN]client-NAME:[Ali-Baba-Basket-Emporium]AREA:[SouthEast]value:[ú1905]=)(=YEAR:1997;month:[dec]client-NAME:[Fletcher]AREA:[Scotland(North)]discount:[7%]value:[ú741]=)(=YEAR:2003;month:[MAR]client-NAME:[Porridge-dot-com]AREA:[N.Ireland]discount:[7%]value:[ú335]=)
>
> For example, in this record:
> (=YEAR:2003;month:[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