Привет, ребята, у меня есть проблема, которую нужно решить,
У меня есть 2 файла.
Файл A col1, col2, value_total_to_put
File A 201843,12345,30
Файл B col1, col2, col3, value_inputted, missing_value, value_max
201843,12345,447,4,0,4
201843,12345,448,0,0,4
201843,12345,449,0,0,2
201843,12345,450,4,0,4
201843,12345,451,2,0,2
201843,12345,455,4,0,4
201843,12345,457,0,0,4
201843,12345,899,10,0,10
201843,12345,334,0,1,1
201843,12345,364,0,1,1
201843,12345,71,0,2,2
201843,12345,260,0,2,2
201843,12345,321,0,2,2
201843,12345,328,0,2,2
201843,12345,371,0,2,2
201843,12345,385,0,2,2
201843,12345,426,0,2,2
201843,12345,444,0,2,2
201843,12345,31,4,6,10
201843,12345,360,2,87,99
201843,12345,373,4,95,99
201843,12345,472,4,95,99
201843,12345,475,4,95,99
201843,12345,430,0,99,99
201843,12345,453,0,99,99
201843,12345,463,0,99,99
201843,12345,482,0,99,99
201843,12345,484,0,99,99
Мои ключи - col1 и col2 из обоих файлов, и я делаю это ниже, и мой цикл неверен, потому что, когда я достигаю EOF из файла B, мой циклостановился.То, что я хочу, это сопоставить файлы A и B с $ col1 и $ col2, и в то время как value_total_to_put составляет> 0, вывести 1 в каждом цикле и в value_inputted из файла B, когда значение value_inputted меньше значения value_max.Для извлечения из файла A отсутствующее_значение может быть> 0. Для результата я буду печатать, когда значение value_inputted равно value_max, другими словами, последнее значение до достижения значения value_max или value_total_to_put не равно 0.
while ( <FA> ){
chomp;
my($col1,$col2, $value_total_to_put) = split ",";
push @A, [$col1,$col2, $value_total_to_put];
}
my @B;
while ( <FB> ){
chomp;
my($col1,$col2,$col3, $value_inputted, $missing_value, $value_max) = split ",";
push @B, [$col1,$col2,$col3, $value_inputted, $missing_value, $value_max];
}
foreach my $line (@A){
my $idxl = @$line[0].",".@$line[1];
my $value_total_to_put = @$line[2];
while ($value_total_to_put > 0){
foreach my $row ( @B ){
if ( $idxr eq $idxl ){
my $idxr = @$row[0].",".@$row[1];
my $value_inputted = @$row[3];
my $value_max = @$row[5];
my $missing_value = @$row[4];
if ( ($value_inputted eq 0) and ($missing_value eq 0)){
#do_nothing
} elsif($value_inputted == $value_max){
#do_nothing
print join(",", $idxr, @$row[2],"Value_inputted: ".$value_inputted, "Missing_value: ".$missing_value, "Value_max:".$value_max, "Total: ".$value_total_to_put)."\n";
}else{
$value_inputted++;
$missing_value--;
$value_total_to_put--;
}
}
}
last if $value_total_to_put > 0;
}
}
Третий файл будетбудь таким:
201843,12345,447,4,0,4
201843,12345,450,4,0,4
201843,12345,451,2,0,2
201843,12345,455,4,0,4
201843,12345,899,10,0,10
201843,12345,334,1,0,1
201843,12345,364,1,0,1
201843,12345,71,2,0,2
201843,12345,260,2,0,2
201843,12345,321,2,0,2
201843,12345,328,2,0,2
201843,12345,371,2,0,2
201843,12345,385,2,0,2
201843,12345,426,2,0,2
201843,12345,444,2,0,2
201843,12345,31,10,0,10
201843,12345,360,3,86,99
201843,12345,373,5,94,99
201843,12345,472,5,94,99
201843,12345,475,5,94,99
201843,12345,430,1,98,99
201843,12345,453,1,98,99