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);
In reply to File Parsing and Pattern Matching by Mark.Allan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |