Mark.Allan has asked for the wisdom of the Perl Monks concerning the following question:
I have a question for you monksters out there, I want to parse the followin file below. Now from the contents of this file I want to match the VALUEx string as the key field. So VALUE1 VALUE2 VALUE3 VALUE4 all need to be key match. Adding to this. I want to associate attributes (CAUSE, AFFECT) for each type whether they exist or not in the TYPE
// HEADER TAG // VERSION TAG TYPE VALUE1 EQUALS MAIN I am useless text CAUSE FAIL AFFECT ERROR ENDTYPE TYPE VALUE2 EQUALS MAIN I am useful test ENDTYPE TYPE VALUE3 EQUALS MAIN CAUSE DEGRADED ENDTYPE TYPE VALUE4 EQUALS MAIN AFFECT WARNING ENDTYPE
So the OUTPUT from the above file should resemble the following
(TYPE):(CAUSE),(EFFECT) VALUE1:FAIL,ERROR VALUE2:UNDEF,UNDEF VALUE3:DEGRADED,UNDEF VALUE4:UNDEF,WARNING
UNDEF meaning that particular attribute was not defined in the TYPE for that specific VALUE
Below is a snippet of associated code so far which is not working because I need to somehow create an array of attributes and associate them with the key Type
my %results; open(FH,"<$weblog") || die ("cannot open file"); while (<FH>){ next if ($_ =~ /^\//); next if (/^(\s)*$/); if (/^TYPE\s(\S+)\s\S+\s\S+/){ $key = $1;} if (/^CAUSE\s(\S+)/){ $cause = $1);} else{ $cause = "UNDEF";} if (/^AFFECT\s(\S+)/){ $affect = $1;} else{ $affect = "UNDEF";} $results{$key}= join "," => $cause => $affect; } for (sort keys %results) { print "$_:$results{$key}\n";} close (FH);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: File Parsing and Pattern Matching
by toolic (Bishop) on Sep 05, 2013 at 18:57 UTC | |
by GotToBTru (Prior) on Sep 05, 2013 at 19:17 UTC | |
|
Re: File Parsing and Pattern Matching
by kcott (Archbishop) on Sep 05, 2013 at 22:54 UTC | |
|
Re: File Parsing and Pattern Matching
by johngg (Canon) on Sep 05, 2013 at 22:18 UTC | |
|
Re: File Parsing and Pattern Matching
by hdb (Monsignor) on Sep 06, 2013 at 09:25 UTC | |
by Mark.Allan (Sexton) on Sep 06, 2013 at 18:59 UTC |