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";
}
}
Which prints this, because the example has only 1 of the below values from DDATA that's also in SDATA:
MNDJWIEL#OTHERDATA | Yes
OIFNHDU#UNIMPORTANT | No
NSKQI#SOMETHINGHERE | No
HSJEKDIE#DOESNTMATTER | No
From this point I'd like to use the look behind method to make the data this
MNDJWIEL#OTHERDATA | Yes | NAME_I_WANT
OIFNHDU#UNIMPORTANT | No | Missing
NSKQI#SOMETHINGHERE | No | Missing
HSJEKDIE#DOESNTMATTER | No | Missing
Which I can do via two separate scripts, but obviously it would be more efficient to join the functionality.
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;
}
}
Which prints:
NAME_I_WANT
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.
|