in reply to Re^3: nesting loops help?
in thread nesting loops help?
Which prints this, because the example has only 1 of the below values from DDATA that's also in SDATA:use warnings; use strict; open my $schedule, '<', 'Schedule'; my %schedule; $schedule{$_} = 1 while (<$schedule>); close $schedule; open my $wave, '>', 'Wave' or die "Can't open 'Wave': $! +"; open my $keywords, '<', 'Agents' or die "Can't open 'Agents': +$!"; open my $search_file, '<', 'Definitions' or die "Can't open 'Definitio +ns': $!"; my $scheduleData = <<SDATA; SCHEDULE OTHER_NAME DONTCARE NOTIMPORTANT : MNDJWIEL#DIFFERENTDATA OTHERDATA NOTIMPORTANT END SCHEDULE NAME_I_WANT DONTCARE NOTIMPORTANT : MNDJWIEL#OTHERDATA OTHERDATA NOTIMPORTANT END SDATA my $agentData = <<ADATA; HSJEKDIE MNDJWIEL NSKQI OIFNHDU H3KID ADATA my $defsData = <<DDATA; MNDJWIEL#OTHERDATA SCRIPTNAME "JKASDHAJSDHAKJDAS.cmd" DESCRIPTION "NOTIMPORTANT" OIFNHDU#UNIMPORTANT SCRIPTNAME "JKASDHAJSDHAKJDAS.cmd" DESCRIPTION "SOMETIMES HAS AGENTNAME OIFNHDU" NSKQI#SOMETHINGHERE SCRIPTNAME "JKASDHAJSDHAKJDAS.cmd" DESCRIPTION "NOTIMPORTANT" HSJEKDIE#DOESNTMATTER SCRIPTNAME "SOMETIMES HAS AGENTNAME HSJEKDIE" DESCRIPTION "NOTIMPORTANT" DDATA open my $schdIn, '<', \$scheduleData or die "Can't open 'Schedule': $! +"; my %scheduleMatch = map {chomp; $_ => 1} <$schdIn>; open my $agentsIn, '<', \$agentData or die "Can't open 'Agents': $!"; open my $defsIn, '<', \$defsData or die "Can't open 'Definitions': +$!"; my $agentsList = join '|', map {chomp; qr/\Q$_\E/} <$agentsIn>; my $agentsMatch = qr|\b($agentsList)\b|; while (defined(my $defLine = <$defsIn>)) { chomp $defLine; if ($defLine =~ $agentsMatch && $defLine !~ /(SCRIPTNAME|DESCRIPTI +ON)/) { my $lineout = $defLine; my $flag = $scheduleMatch{$defLine} ? 'Yes' : 'No'; print "$defLine | $flag\n"; } }
From this point I'd like to use the look behind method to make the data thisMNDJWIEL#OTHERDATA | Yes OIFNHDU#UNIMPORTANT | No NSKQI#SOMETHINGHERE | No HSJEKDIE#DOESNTMATTER | No
Which I can do via two separate scripts, but obviously it would be more efficient to join the functionality.MNDJWIEL#OTHERDATA | Yes | NAME_I_WANT OIFNHDU#UNIMPORTANT | No | Missing NSKQI#SOMETHINGHERE | No | Missing HSJEKDIE#DOESNTMATTER | No | Missing
Which prints:use warnings; use strict; my $scheduleData = <<SDATA; SCHEDULE OTHER_NAME DONTCARE NOTIMPORTANT : MNDJWIEL#DIFFERENTDATA OTHERDATA NOTIMPORTANT END SCHEDULE NAME_I_WANT DONTCARE NOTIMPORTANT : MNDJWIEL#OTHERDATA OTHERDATA NOTIMPORTANT END SDATA my $defLine = 'MNDJWIEL#OTHERDATA'; open my $schdIn, '<', \$scheduleData or die "Can't open 'Schedule': $! +"; my @values=(); while (<$schdIn>) { if (/(^SCHEDULE)(.*)/) { # SCHEDULE SCHEDULENAME, I only want the na +me. push(@values, $2); } if (/$defLine/) { print $values[-1]; last; } }
I will say that at first I didn't see the point in adding sample data but I kind of get it now, seeing what I'm trying to get from the data helps convey desired functionality that I may not be good at explaining.NAME_I_WANT
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: nesting loops help?
by GrandFather (Saint) on Mar 13, 2022 at 23:01 UTC | |
by shadowfox (Beadle) on Mar 14, 2022 at 02:52 UTC | |
by shadowfox (Beadle) on Mar 14, 2022 at 15:25 UTC | |
by GrandFather (Saint) on Mar 14, 2022 at 20:56 UTC | |
by shadowfox (Beadle) on Mar 14, 2022 at 22:21 UTC | |
by GrandFather (Saint) on Mar 15, 2022 at 00:02 UTC | |
|