On 01/04/2011 12:00, Anirban Adhikary wrote:
> Hi List
> 
> I am trying to parse the following file and load it into a hash.
> 
> File Structure
> 
> 
[snip data]
> 
> Separater is colon(:)
> 
> my code
> 
> use strict;
> use warnings;
> my $fname = $ARGV[0];
> open my $RFH,'<',$fname;
> 
> while (<$RFH>) {
>       next unless /:/ and  my %field = /(.*?):(.*?)/mg;
>       foreach my $key (keys %field ) {
>               print "KEY=[$key]------VALUE=[$field{$key}]\n";
>       }
> }
> 
> But I am not getting the desired result.

The code below seems to do what you want.

Cheers,

Rob


use strict;
use warnings;

my $data;
{
  local $/;
  $data = <DATA>;
}

my $key = qr/ (?: \w+ [ ] )* \w+ /x;

my @xx = $data =~ /\G ( $key ) \s? : \s* (.+?) \s* (?=  $key \s? : | \z)/sgx;

while (@xx) {
  my ($key, $val) = splice @xx, 0, 2;
  printf "%s=%s\n", $key, $val;
}

__DATA__
DN:     2570764                   (PORTED-IN)
TYPE: SINGLE PARTY LINE
SNPA: 438   SIG: DT    LNATTIDX: 4
XLAPLAN KEY :   438CAUC1                RATEAREA KEY :     ILEPEROT
LINE EQUIPMENT NUMBER:     LG    31 5 02 57
LINE CLASS CODE:      1FR
IBN TYPE: STATION
CUSTGRP:         RESGRP     SUBGRP: 0  NCOS: 1
LINE TREATMENT GROUP:     1
CARDCODE:  RDTLSG    GND: N  PADGRP: PKNIL  BNV: NL MNO: N
PM NODE NUMBER     :    387
PM TERMINAL NUMBER :    258
DNGRPS OPTIONS:
NETNAME: PUBLIC
ADDRESS:              5144254676
OPTIONS:
COD DGT NAME PUBLIC HR BLOCK IMPOTS PIC 6885 Y
RES OPTIONS: NONE
OFFICE OPTIONS:
U3WC AIN TIID

**OUTPUT**

DN=2570764                   (PORTED-IN)
TYPE=SINGLE PARTY LINE
SNPA=438
SIG=DT
LNATTIDX=4
XLAPLAN KEY=438CAUC1
RATEAREA KEY=ILEPEROT
LINE EQUIPMENT NUMBER=LG    31 5 02 57
LINE CLASS CODE=1FR
IBN TYPE=STATION
CUSTGRP=RESGRP
SUBGRP=0
NCOS=1
LINE TREATMENT GROUP=1
CARDCODE=RDTLSG
GND=N
PADGRP=PKNIL
BNV=N
L MNO=N
PM NODE NUMBER     :    387
PM TERMINAL NUMBER=258
DNGRPS OPTIONS=N
ETNAME=PUBLIC
ADDRESS=5144254676
OPTIONS=COD DGT NAME PUBLIC HR BLOCK IMPOTS PIC 6885 Y
RES OPTIONS=NONE
OFFICE OPTIONS=U3WC AIN TIID

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to