Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^5: Loop Array - If $var is something write values until $var is something else

by Marshall (Canon)
on Sep 30, 2018 at 03:00 UTC ( [id://1223305]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Loop Array - If $var is something write values until $var is something else
in thread Loop Array - If $var is something write values until $var is something else

I am not quite sure about your "rules" for parsing the input. Here is one possibility:

Update: I did the following code rather quickly. I changed my mind during the middle of coding and didn't revise the previously written code. process_record() could be shortened by calling process_sub_record() a couple of times instead of just once. This is a small detail and should be obvious how to do. The OP is still not completely clear as to whether these "Something" and "Something Else" strings are standard invariant sub-headers or whether they can vary. Also not spec'd is whether the number of lines in the record can vary or not.

Well, Ok, another update... The change to call process_sub_record() twice was so extremely trivial, that I did it and put original code in a readmore block. Perhaps it is not obvious but this implementation allows blank and comment lines at the beginning or end of the file - I have often found that feature useful in my work.

#!/usr/bin/perl use strict; use warnings; while (defined (my $x= <DATA>)) { process_record ($x) if ($x =~ /^JOB::/) } sub process_record { my $job = shift; chomp $job; print "$job\n"; process_sub_record(); process_sub_record(); } sub process_sub_record { my $sub_record = <DATA>; chomp $sub_record; for (1..4) { my $nextLine = <DATA>; chomp $nextLine; print "~~$sub_record~~ ", "$nextLine\n"; } } =PRINTS: JOB::HEREISASTRING ~~Something~~ StringA ~~Something~~ StringB ~~Something~~ StringC ~~Something~~ StringD ~~Something Else~~ StringE ~~Something Else~~ StringF ~~Something Else~~ StringG ~~Something Else~~ StringH JOB::HEREISANOTHERSTRING ~~Something~~ StringI ~~Something~~ StringJ ~~Something~~ StringK ~~Something~~ StringL ~~Something Else~~ StringM ~~Something Else~~ StringN ~~Something Else~~ StringO ~~Something Else~~ StringP =cut __DATA__ JOB::HEREISASTRING Something StringA StringB StringC StringD Something Else StringE StringF StringG StringH JOB::HEREISANOTHERSTRING Something StringI StringJ StringK StringL Something Else StringM StringN StringO StringP
#!/usr/bin/perl use strict; use warnings; while (defined (my $x= <DATA>)) { process_record ($x) if ($x =~ /^JOB::/) } sub process_record { my $job = shift; chomp $job; print "$job\n"; my $firstLine = <DATA>; chomp $firstLine; for (1..4) { my $nextLine = <DATA>; chomp $nextLine; print "~~$firstLine~~ ", "$nextLine\n"; } process_sub_record(); } sub process_sub_record { my $sub_record = <DATA>; chomp $sub_record; for (1..4) { my $nextLine = <DATA>; chomp $nextLine; print "~~$sub_record~~ ", "$nextLine\n"; } } =PRINTS: JOB::HEREISASTRING ~~Something~~ StringA ~~Something~~ StringB ~~Something~~ StringC ~~Something~~ StringD ~~Something Else~~ StringE ~~Something Else~~ StringF ~~Something Else~~ StringG ~~Something Else~~ StringH JOB::HEREISANOTHERSTRING ~~Something~~ StringI ~~Something~~ StringJ ~~Something~~ StringK ~~Something~~ StringL ~~Something Else~~ StringM ~~Something Else~~ StringN ~~Something Else~~ StringO ~~Something Else~~ StringP =cut __DATA__ JOB::HEREISASTRING Something StringA StringB StringC StringD Something Else StringE StringF StringG StringH JOB::HEREISANOTHERSTRING Something StringI StringJ StringK StringL Something Else StringM StringN StringO StringP

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (7)
As of 2024-04-19 09:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found