1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
use strict;
use warnings;
use List::Util qw(first);
use constant SCRIPT_NAME => "patch_mapping.pl";
use constant SCRIPT_VERSION => "1.0.0";
#use Log4TA;
#Log_Info("USAGE: " . SCRIPT_NAME . <Frame Report Folder> <FRAME_NAME>,<FRAME_NAME> [<output directory>]");
#Log_SetOutDir(".");
#Log_SetOutFile("log_patch_mapping.log");
my $ScrDIR = $ARGV[0];
my $FrameName = $ARGV[1];
my $out_dir = $ARGV[2];
my $FrameReport;
my $AddedFrame;
my @added_frames;
my $frm_report;
my @array;
my $input;
my $frame_name;
my $ReadState = 0;
my @signals;
my @found;
#Log_Info("Running script " . SCRIPT_NAME . " version " . SCRIPT_VERSION);
#Log_Info("USAGE: " . SCRIPT_NAME . " <Frame Report Folder> <FRAME_NAME>,<FRAME_NAME> [<output directory>]\n\n");
#----------------------Main--------------------------------------
while ($input ne "quit")
{
#CAN OR FLEXRAY OR QUIT
print "\n-\t1 for Acan or FAcan \n-\t2 for Flex\n-\tquit to terminate\n=> ";
$input = <STDIN>;
chomp $input;
if ($input eq "1")
{
$FrameReport = $ScrDIR."\\test.txt"; #Source document: Frame report list
$ReadState = 1;
# change block separator to have one complete frame
# read per iteration
local $/ = "\nFRAME NAME:";
&Add_Frames();
}
elsif ($input eq "2")
{
$FrameReport = $ScrDIR."\\frm_flex_report.txt"; #Source document: Frame report list
$ReadState = 2;
# change block separator to have one complete frame
# read per iteration
local $/ = "FRAME NAME:";
&Add_Frames();
}
elsif ($input eq "quit")
{
$ReadState = 0;
exit;
}
else
{
print "\nThe value entered is false, please enter a correct value.\n\n";
}
}
#--------------------END Main--------------------------------------
sub Add_Frames
{
# check for valid input parameter
if(! defined $FrameReport or ! -f $FrameReport)
{
Log_Error("No frame report file given!");
die;
}
if(!defined $FrameName)
{
Log_Error("No frame name given!");
die;
}
else
{
@added_frames = split(/,/,$FrameName);
}
if(defined $out_dir)
{
if(! -d $out_dir)
{
mkdir $out_dir;
}
}
else
{
$out_dir = ".";
}
#$size = scalar(@added_frames);
#for my $i(0..$size - 1)
#{
# Log_Info("added frame: $added_frames[$i]");
#}
#-----Open source file------------------
{
open my $fhR, '<', $FrameReport or die "$FrameReport: $!";
#----------------------------------------
#-----add signal to mapping file--------
my $fhWrite = $out_dir."\\mapping".".txt";
open ($out_dir, '>>', $fhWrite) or die "Unable to open the file $fhWrite\n";
#----------------------------------------
# change block separator to have one complete frame
# read per iteration
#local $/ = "\nFRAME NAME:";
# read the blocks
while ( my $block = <$fhR> )
{
next if $. == 1; # skip the "header"
chomp $block; # remove block separator
# get frame name
($frame_name) = $block =~ m{\A [^\(\[]*[\(\[] (\w+) [\)\]\,] }x;
# skip the frame when no name is given
next if !$frame_name;
# check if user wants to get info about frame. Skip the frame if the
# user didn't mentioned it
next if !first{ $frame_name eq $_ }@added_frames;
# get all signals
if ($ReadState == 1)
{
@signals = grep{ $_ }$block =~ m{^ \s* :+ 0x\d+ (.*?) \r?\n? $}xmg;
}
if ($ReadState == 2)
{
@signals = grep{ $_ }$block =~ m{^ \s* :+ \d+ (.*?) \r?\n? $}xmg;
}
#print"my signal 1: $signals[0]\n";
@found;
for my $signal( @signals )
{
# skip signals that contains "FREI" or "(ID2)"
next if index( $signal, 'FREI' ) != -1;
next if index( $signal, '(ID2)' ) != -1;
if ($ReadState == 1)
{
# skip signal if it does not contain _FA, or _A,
next if $signal !~ m{ _F?A, }x;
next if $signal !~ m{ \( }x;
}
if ($ReadState == 2)
{
# skip signal if it does not contain _FX,
next if $signal !~ m{ _FX, }x;
}
#selects string after the opened bracket
( $_, $signal) = split(/\(/,$signal);
#from the selected string, selects the one before the closed bracket
( $_, $signal) = split(/\)/,$signal);
@array = split(/, /,$signal);
print $out_dir $_, ";", "$array[1]\n";
Log_Info("added signal: $_; $array[1]");
#my ($value) = $signal =~ m{ \( ([^\)]+) \)\,([^']+)\,}x;
}
}
close $fhR;
exit;
}
} |
Partager