у меня есть два файла. один из них - входной файл пользователя, а другой - оригинальный файл конфигурации. После сравнения двух файлов добавьте / удалите функции в моем исходном файле конфигурации.
пользовательский входной файл: (показывается строка за строкой)
add:L28A:Z:W #add--> DID ID --> Bin ID
del:L28C:B:Q:X:
оригинальный входной файл
L28A:B:Q:M:X:
L28C:B:Q:M:X:
L38A:B:Q:M:X:
в зависимости от входного файла пользователя: сначала выполняется функция добавления, затем - функция удаления, а третья - функция замены. поэтому вывод для исходного входного текстового файла должен показывать:
L28A:B:Q:M:X:Z:W
L28C:M:
L38A:B:Q:M:X:
, но мой код показывает:
L28A:B:Q:M:X:Z:W
L28C:M:
как я могу отобразить остальную часть исходной строки конфигурации?
use strict;
use warnings;
use File::Copy;
use vars qw($requestfile $requestcnt $configfile $config2cnt $my3file $myfile3cnt $new_file $new_filecnt @output);
my $requestfile = "DID1.txt"; #user's input file
my $configfile = "DID.txt"; #original config file
my $new_file = "newDID.txt";
readFileinString($requestfile, \$requestcnt);
readFileinString($configfile, \$config2cnt);
copy($configfile, $new_file) or die "The copy operation failed: $!";
open(DES,'>',$configfile) or die $!;
while ($requestcnt =~ m/^((\w){3})\:([^\n]+)$/mig) #Each line from user request
{
my $action = $1;
my $requestFullLine = $3;
while ($requestFullLine =~ m/^((\w){4})\:([^\n]+)$/mig) #Each line from user request
{
my $DID = $1; #DID
my $requestBinList = $3; #Bin List in user request
if ($config2cnt =~ m/^$DID\:([^\n]+)$/m) #configfile
{
my $ConfigFullLine = $1; #Bin list in config
my $testfile = $1;
my @First_values = split /\:/, $ConfigFullLine;
my @second_values = split /\:/, $requestBinList;
foreach my $sngletter(@second_values) # Each line from user request
{
if( grep {$_ eq "$sngletter"} @First_values)
{
print " $DID - $sngletter - Existing bin..\n\n";
}
else
{
print "$DID - $sngletter - Not existing bin..\n\n";
}
}
print "Choose option 1.Yes 2.No\n";
my $option = <STDIN>;
if ($option == 1) {
if($action eq 'add')
{
$ConfigFullLine =~ s/$/$requestBinList/g;
my $add = "$DID:$ConfigFullLine";
print DES "$add\n" ;
print"New Added Bin Valu $add\n\n";
}
if ( $action eq 'del')
{
foreach my $sngletter(@second_values){
$ConfigFullLine =~ s/$sngletter://g;
}
print DES "$DID:$ConfigFullLine\n";
print "New Deleted Bin Value $DID:$ConfigFullLine\n\n";
}
if ( $action eq 'rpl')
{
my $ConfigFullLine = $requestBinList;
my $replace = "$DID:$ConfigFullLine";
print DES "$replace\n";
print"Replace Bin Value $replace\n\n";
}
}
elsif ($option == 2)
{
print"Start from begining\n";
}
else
{
print "user chose invalid process or input is wrong\n";
}
}
else
{
print "New DID $DID detected\n";}
}
}
sub readFileinString
{
my $File = shift;
my $string = shift;
use File::Basename;
my $filenames = basename($File);
open(FILE1, "<$File") or die "\nFailed Reading File: [$File]\n\tReason: $!";
read(FILE1, $$string, -s $File, 0);
close(FILE1);
}