I have the following
__DATA__ blah blah blah blah blah blah blah blah blah blah blah blah INTERESTING CODE-- CODE NAME CODE NAME -------- ----------------------- -------- ----------------------- ABC NAME ONE RST NAME EIGHT ... DEF NAME TWO THREE WXY NAME NINE - TEN GHIJK NAME FOUR ... ZAB NAME ELEVEN LMN NAME FIVE - SIX CDE NAME TWELVE OPQ NAME SEVEN more blah blah blah
I want the following
######################### print $interesting_code; # output "NAME ONE, NAME TWO THREE, NAME FOUR ..., NAME FIVE - SIX, NAME SEVEN, + NAME EIGHT ..., NAME NINE - TEN, NAME ELEVEN, NAME TWELVE" # you get the picture... a csv list of NAMEs #########################
I have almost solved the above, but my code is so juvenile that I put it forth here with great embarassment. It is also not producing the correct output, and is certainly not going to hold for variations in the above. While there could be variations in the INTERESTING CODE block, it would still be formatted as above. A two-column set of two columns, the CODE followed by the NAME
my $stuff; my @stuff; while (<DATA>) { if ($stuff) { push(@stuff, $_) if (!($_ =~ /^\s*CODE\s*NAME/) && !($_ =~ /^\s*-+/)); } else { $stuff = 1 if ($_ =~ /^INTERESTING CODE-+/); } } my @interesting_code; for (@stuff) { my @code = split(/\s{2,}/, $_); my $i = 0; for (@code) { push(@interesting_code, $_) if !($i % 2); $i++; } } $interesting_code = join(', ', @interesting_code);
I seek edification; and better, and more dependable code. All advice welcomed with gratitude.
Update: Reformatted so one wouldn't get a headache from reading it.
In reply to Extracting formatted text block by punkish
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |