http://www.perlmonks.org?node_id=1001817


in reply to Re^3: Reading tab/whitespace delimited text file
in thread Reading tab/whitespace delimited text file

why is the code not able to read the following ???
CELL LUC325C CELLR DIR CAND CS LUC325B MUTUAL BOTH NO KHYST KOFFSETP KOFFSETN LHYST LOFFSETP LOFFSETN 3 0 3 0 TRHYST TROFFSETP TROFFSETN AWOFFSET BQOFFSET 2 0 5 3 HIHYST LOHYST OFFSETP OFFSETN BQOFFSETAFR 5 3 0 3
The value for cell key should be LUC325C but i keep getting LUC3.. thats it ..!! help appreciated ..!!

Replies are listed 'Best First'.
Re^5: Reading tab/whitespace delimited text file
by BrowserUk (Patriarch) on Nov 01, 2012 at 13:08 UTC

    Because in order to find the length of each field in this crazy format, it relies on the length of the header field to determine the length of the value fields.

    But, (uniquely) in the case of:

    CELL LUC325C

    The header field is shorter than the value field.

    And as that record pair was not a part of the sample you showed when you originally asked this question, the code does not cater for it.

    Adding this line to the code above will allow it to handle that part of the data format:

    $tmpl =~ s[\d+$][*];

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    RIP Neil Armstrong

      Thank you soooo much for helping .. i'm a newbie to perl and figuring out everything as i go on ...
      The code works perfectly ..!!!!! However , while this works for a sample data , when i use it parse the actual text file , it behaves weirdly .. This is what i get for the sample data :
      { AWOFFSET => 5, BQOFFSET => 3, BQOFFSETAFR => 3, CAND => "BOTH", CELL => "LUC325C", CELLR => "LUC232A", CS => "NO", DIR => "MUTUAL", HIHYST => 5, KHYST => 3, KOFFSETN => "", KOFFSETP => 0, LHYST => 3, LOFFSETN => "", LOFFSETP => 0, LOHYST => 3, OFFSETN => "", OFFSETP => 0, TRHYST => 2, TROFFSETN => "", TROFFSETP => 0, } Press any key to continue . . .

      And this is what i get when i execute it on a text file :
      { CELL => "LUC325C" } { BOTH => "", LUC325B => "", MUTUAL => "", NO => "" } {} { BQOFFSETAFR => "", HIHYST => 5, LOHYST => "3 0", OFFSETN => "", OFFSETP => 3, } { BOTH => "", LUC116A => "", MUTUAL => "", NO => "" } {} { BQOFFSETAFR => "", HIHYST => 5, LOHYST => "3 0", OFFSETN => "", OFFSETP => 3, } { BOTH => "", LUC204A => "", MUTUAL => "", NO => "" } {} Press any key to continue . . .

      Any idea as to why this behaves differently for the same set of data ?????
        Any idea as to why this behaves differently for the same set of data ?????

        I'll need to see both the exact code you are using and the exact datafile. (I'll /msg you my email id.)


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        RIP Neil Armstrong