Asterisk рдХреЗ рд▓рд┐рдП DEF рдХреЛрдб рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдорд╛рд╕реНрдХ рдЬрдирд░реЗрдЯрд░

рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:
  1. рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХрдИ рдПрд╕рдЖрдИрдкреА рдСрдкрд░реЗрдЯрд░, рдФрд░ рдХреБрдЫ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЛрдмрд╛рдЗрд▓ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ "рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ" рдЯреИрд░рд┐рдл рд╣реИрдВ;
  2. рдЪрдпрдирд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП rossvyaz.ru рдкрд░ DEF рдХреЛрдб рдкрд░ рдбреЗрдЯрд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд, рдЬрд┐рдирдореЗрдВ рдЖрд╕рдиреНрди рд╡рд╛рд▓реЗ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрдЧрд╛рдлреЛрди рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп);
  3. рдПрд▓реЗрд╕реНрдЯрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рд╡рд┐рддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдо рдореЙрд╕реНрдХреЛ рдореЛрдмрд╛рдЗрд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ (рдПрдорд╕реАрд╕реА, рдмреАрд▓рд╛рдЗрди, рдПрдордЯреАрдПрд╕, рдореЗрдЧрд╛рдлреЛрди) рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдХ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдпрд╛ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрджреНрдпрддрдиред: рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдХреЗ рд▓рд┐рдП DEF- рдХреЛрдб рдорд╛рд╕реНрдХ рдЬрдирд░реЗрдЯрд░ - рдЕрдм рдСрдирд▓рд╛рдЗрди =)ред

<?php $linecode = '98'; //      //   $file = fopen('http://www.rossvyaz.ru/docs/articles/DEF-9x.html', 'r'); //     $defs = array(); while(($line = fgets($file)) && ($line !== FALSE)) { $line = iconv('WINDOWS-1251', 'UTF-8', $line); if(preg_match('|<tr>\s*<td>\s*(\d+)\s*</td>\s*<td>\s*(\d+)\s*</td>\s*<td>\s*(\d+)\s*</td>\s*<td>\s*(\d+)\s*</td>\s*<td>\s*(.+?)\s*</td>\s*<td>\s*(.+?)\s*</td>\s*</tr>|', $line, $matches)) { if(!isset($defs[$matches[6]])) { $defs[$matches[6]] = array(); } if(!isset($defs[$matches[6]][$matches[5]])) { $defs[$matches[6]][$matches[5]] = array(); } $defs[$matches[6]][$matches[5]][] = array($matches[1],$matches[2],$matches[3]); } } fclose($file); //         $selected = array(); foreach($defs as $reg => $ops) { if($reg == '   ') { foreach($ops as $op => $cs) { usort($cs, "cmp_defs"); switch($op) { case '  ': case '-': case ' ': case '': if(!isset($selected[$op])) { $selected[$op] = array(); } $newset = true; $cnt = 1; foreach($cs as $cid => $c) { if($newset) { $selected[$op][] = array($c[0], $c[1]); } if(isset($cs[$cid+1]) && ($c[0] == $cs[$cid+1][0]) && (($c[2] + 1) == $cs[$cid+1][1])) { $newset = false; $cnt++; } else { $selected[$op][count($selected[$op]) - 1][2] = $c[2]; $newset = true; $cnt = 1; } } break; } } } } //    Asterisk $regs = array(); foreach($selected as $op => $defs) { $regs[$op] = array(); foreach($defs as $def) { //    ,      // $leq -    ,  $req   =) $pref = $def[0]; $first = $def[1]; $last = $def[2]; if($first > $last) { $tmp = $first; $first = $last; $last = $tmp; } //         unshift/push       =) $r = array(); $rf = array(); $rl = array(); $req = 0; for($i = 0; $i < 7; $i++) { if($first[$i] === $last[$i]) { $req++; } else { break; } } $leq = 0; for($i = 6; $i >= 0; $i--) { if(($first[$i]) === "0" && ($last[$i] === "9")) { $leq++; } else { break; } } $zf = true; $nl = true; if($leq + $req < 6) for($i = $leq; $i + $req < 6; $i++) { $sl = 6 - $i; $pf = substr($first, 0, 6 - $i); $pl = substr($last, 0, 6 - $i); if($pf < $pl) { $x = $first[6 - $i]; if(!$zf || ($x != '0')) { switch($x) { case '9': array_push($rf, $pref . $pf . '9' . str_repeat('X', $i)); break; case '8': array_push($rf, $pref . $pf . '[89]' . str_repeat('X', $i)); break; default: array_push($rf, $pref . $pf . '[' . $x . '-9]' . str_repeat('X', $i)); } $first = sprintf('%0' . $sl . 'd', substr($first, 0, $sl) + 1 ) . str_repeat('0', 7 - $sl); $zf = false; } $x = $last[6 - $i]; if(!$nl || ($x != 9)) { switch($x) { case '0': array_unshift($rl, $pref . $pl . '0' . str_repeat('X', $i)); break; case '1': array_unshift($rl, $pref . $pl . '[01]' . str_repeat('X', $i)); break; default: array_unshift($rl, $pref . $pl . '[0-' . $x . ']' . str_repeat('X', $i)); } $last = sprintf('%0' . $sl . 'd', substr($last, 0, $sl) - 1 ) . str_repeat('9', 7 - $sl); $nl = false; } } $leq++; } if($leq + $req <= 7) { if($leq < 7) { $sl = 6 - $leq; $pf = substr($first, 0, 6 - $leq); $pl = substr($last, 0, 6 - $leq); $xf = $first[6 - $leq]; $xl = $last[6 - $leq]; if(($pf == $pl) && ($xf <= $xl)) { if($xf == $xl) { $r[] = $pref . $pf . $xf . str_repeat('X', $leq); } elseif($xf + 1 == $xl) { $r[] = $pref . $pf . '[' . $xf . $xl . ']' . str_repeat('X', $leq); } else { $r[] = $pref . $pf . '[' . $xf . '-' . $xl . ']' . str_repeat('X', $leq); } } } else { $r[] = $pref . str_repeat('X', $leq); } } $regs[$op] = array_merge($regs[$op], $rf, $r, $rl); } } foreach($regs as $op => $reg) { echo "\n\n=== $op ===\n\n"; foreach($reg as $r) { echo $linecode . $r . "\n"; } } function cmp_defs($a, $b) { if($a[0] != $b[0]) return $a[0] - $b[0]; return $a[1] - $b[1]; } ?> 

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рд╣реИ: 1 рд╕рд┐рддрдВрдмрд░, 2012 рддрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ ред

рдкреБрдирд╢реНрдЪ: рдХреЛрдб рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рд░реЙрд╕рд┐рд╡реЗрдЬрд╝ рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд░рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╕реЗ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдирд╛рдЗрди рдХреЗ рд╕рд╛рдеред рдпреЗ DEF рдХреЛрдб рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рд╕рд╛рдд рдЕрдВрдХ рд╣реИрдВред
PPS: рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ - рд╣рд╛рдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ =)


Source: https://habr.com/ru/post/In150793/


All Articles