Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: matching characters

by Athanasius (Archbishop)
on Sep 03, 2014 at 07:16 UTC ( [id://1099352]=note: print w/replies, xml ) Need Help??


in reply to matching characters

Hello shylaja,

As McA has shown, you can use the /g modifier in this way if you first read in the whole data file. But if the file is large, it may be necessary to process it line by line. For that, you need a different strategy; for example:

#! perl use strict; use warnings; use Data::Dump; my @fields = qw( Summary Component Product Version Date ); my @issues; while (<DATA>) { chomp; if (/^ISSUE\s+(\w{5}\d+)$/) { push @issues, { Id => $1 }; } else { for my $field (@fields) { if (/^$field\s*:\s+(.+)$/) { $issues[-1]->{$field} = $1; last; } } } } dd \@issues; __DATA__ ----------------------------------------------------------- ISSUE ABCDE00078945 ----------------------------------------------------------- Summary : summary about the issue Component : Component desscription Product : Product name Version : Version number Date : 2013-10-15 ----------------------------------------------------------- ISSUE ABCDE00012345 ----------------------------------------------------------- Summary : summary about the issue Component : Component description Product : Product name Version : Version number Date : 2014-10-15

Output:

17:02 >perl 996_SoPW.pl [ { Component => "Component desscription ", Date => "2013-10-15", Id => "ABCDE00078945", Product => "Product name", Summary => "summary about the issue", Version => "Version number", }, { Component => "Component description ", Date => "2014-10-15", Id => "ABCDE00012345", Product => "Product name", Summary => "summary about the issue", Version => "Version number", }, ] 17:02 >

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: matching characters
by hdb (Monsignor) on Sep 03, 2014 at 08:57 UTC

    If one removes the checking of the field names, one can write this also in a more concise way. TIMTOWDY!

    my @issues; while (<DATA>) { push @issues, { Id => $1 } if /^ISSUE\s+(\w{5}\d+)$/; $issues[-1]->{$1} = $2 if /^(\w+)\s*:\s+(.+)$/ } dd \@issues;

      Thanks all for your replies.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1099352]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (5)
As of 2024-03-28 23:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found