Anirban Adhikary wrote:
Hi List

Hello,

I am trying to parse the following file and load it into a hash.

File Structure


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

Separater is colon(:)

my code

use strict;
use warnings;
my $fname = $ARGV[0];
open my $RFH,'<',$fname;

You should always verify that the file opened correctly before trying to use the filehandle:

open my $RFH, '<', $fname or die "Cannot open '$fname' because: $!";


while (<$RFH>) {
        next unless /:/ and  my %field = /(.*?):(.*?)/mg;

You are testing for the presence of a colon twice which is redundant.

In the match /(.*?):(.*?)/mg the /m option is superfluous because you are not using the anchors ^ or $. But your real problem seems to be ':(.*?)' which will match *zero* non-newline characters after the colon. In lines with more than one colon you need some way to properly parse the different fields which may be difficult because it looks like some keys have embedded whitespace.


        foreach my $key (keys %field ) {
                print "KEY=[$key]------VALUE=[$field{$key}]\n";
        }
}

But I am not getting the desired result.

What exactly are the desired results?



John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction.                   -- Albert Einstein

--
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