Выполнение Perl-скрипта из командной строки Windows с 2 записями - PullRequest
0 голосов
/ 02 октября 2018

это мой Perl-скрипт

use strict;
use warnings;
use XML::Twig;
use Data::Dumper;

sub xml2array{
my $path = shift; 
my $twig = XML::Twig->new->parsefile($path); 
return map { $_ -> att('VirtualPath') } $twig -> get_xpath('//Signals');
} 

sub compareMappingToArray {
my $mapping = shift;
my $signalsRef = shift; 
my $i = 1;

print "In file : $mapping\n";

open(my $fh, $mapping);
while (my $r = <$fh>) {
    chomp $r; 


    if ($r =~ /\'(ModelSpecific.*)\'/) {
        my $s = $1;


        my @matches = grep { /^$s$/ } @{$signalsRef};

        print "line $i : not found - $s\n" if scalar @matches ==0;
        print "line $i : multiple $s\n" if scalar @matches > 1;
    }

    $i = $i + 1 # keep line index
 }
}

my $mapping = "C:/Users/HOR1DY/Desktop/Global/TA_Mapping/CAN/CAN_ESP_002_mapping.pm";      
my @virtualpath = xml2array("SignalModel.xml");
compareMappingToArray($mapping,  \@virtualpath);

Сценарий работает хорошо, его цель - сравнить файлы "SignalModel.xml" и "CAN_ESP_002_mapping.pm" и поместить строки, которые несовпадения в файле .TXT.Вот как выглядит файл .TXT:

In file : C:/Users/HOR1DY/Desktop/Global/TA_Mapping/CAN/CAN_ESP_002_mapping.pm
line 331 : not found - ModelSpecific.EID.NET.CAN_Engine.VCU.Transmit.VCU_202.R2B_VCU_202__byte_3
line 348 : not found - ModelSpecific.EID.NET.CAN_Engine.CMM_WX.Transmit.CMM_HYB_208.R2B_CMM_HYB_208__byte_2
line 368 : not found - ModelSpecific.EID.NET.CAN_Engine.VCU.Transmit.VCU_222.R2B_VCU_222__byte_0

Но для этого скрипта я поместил два файла, которые нужно сравнить, внутри кода, и вместо этого я хотел бы запуститьскрипт в строке windows cmd и имеет что-то вроде:

C:\Users>perl CANMappingChecker.pl -'file 1' 'file 2'

Все файлы находятся в файле .zip, поэтому, если я смогу выполнить скрипт, который он входит внутрь, и взять 2 файла, которые мне нужны для сравнения, этодолжно быть идеально.Я действительно не знаю, как это сделать и что поместить в мой скрипт, чтобы сделать это в окнах cmd.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 02 октября 2018

Параметры программы (или скрипта) хранятся в массиве @ARGV. shift и pop без каких-либо параметров будут работать на @ARGV при использовании вне сабвуфера, в сабвуфере, с которым они работают на @ _.

См. Архив:: Zip для работы с zip-файлами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...