Advertisement
EvenGuy

Задание B

Feb 17th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.13 KB | None | 0 0
  1. <?
  2.     /**
  3.     * Задание А
  4.     *
  5.     * Стандартный файл с входными данными - input.txt
  6.     * Стандартный файл с выходными данными - output.txt
  7.     *
  8.     * Другие имена файлов задаются в качестве параметров констуктора класса
  9.     */
  10.  
  11.     class DecodeShortIPv6 {        
  12.         private $arFileData;    // Данные из файла
  13.         private $arShortAddr;   // Короткий адрес IPv6, разбитый по ячейкам
  14.         private $arFullAddr;    // Строки с полным адресом IPv6
  15.        
  16.         /*
  17.          * Конструктор класса
  18.          * $inFName - имя входного файла
  19.          * $outFName - имя выходного файла
  20.          */
  21.         function __construct($inFName = 'input.txt', $outFName = 'output.txt') {
  22.             // Считывание входных данных
  23.             try { $this->loadDataFromFile($inFName); }
  24.             catch (Exception $e) {
  25.                 echo "При считывание файла $inFName возникла ошибка: ".$e->GetMessage();
  26.                 exit;
  27.             }
  28.            
  29.             // Обработка входных данных
  30.             try  { $this->procInData(); }
  31.             catch (Exception $e) {
  32.                 echo "При обработке входных данных возникла ошибка: ".$e->GetMessage();
  33.                 exit;
  34.             }
  35.            
  36.             // Замена пустого пространства с самой большой группой нулей - самими нулями
  37.             $this->resizeAddr();
  38.            
  39.             /*// Рассширение адресов до полного формата
  40.             $this->setFullAddr();
  41.            
  42.             // Запись результата в файл
  43.             try { $this->saveResToFile($outFName); }
  44.             catch (Exception $e) {
  45.                 echo "При записи в файл $outFName возникла ошибка: ".$e->GetMessage();
  46.                 exit;
  47.             }*/
  48.         }      
  49.        
  50.         /*
  51.          * Метод - чтение данных из файла
  52.          * Параметры: $FName - имя файла
  53.          *
  54.          * Считывает все строки файла и параллельно их преобразует, записывая в
  55.          * массив $arVals
  56.          */
  57.         function loadDataFromFile($FName) {
  58.             // Проверка наличия имени файла
  59.             if ( strlen($FName) == 0 )
  60.                 throw new Exception('Не задано имя файла');
  61.            
  62.             // Проверка существования самого файла
  63.             if ( !file_exists($FName) )
  64.                 throw new Exception('Файл не существует');
  65.            
  66.             // Проверка размера файла
  67.             if ( !filesize($FName) )
  68.                 throw new Exception('Файл пуст');            
  69.            
  70.             // Считывание данных всего файла в массив
  71.             $this->arFileData = file($FName);
  72.         }
  73.        
  74.         /*
  75.          * Метод - разбивает строку с разделителями ячеек адреса (:) - на ячейки массива
  76.          * и сохраняет получившуюся структуру в $arShortAddr. Если встретилась пустая ячейка (::) -
  77.          * ставит обозначение L, для дальнейшей доработки массива.
  78.          */
  79.         function procInData() {
  80.             $addrNum = 0;
  81.             $this->arShortAddr = array();
  82.            
  83.             foreach($this->arFileData as $row) {
  84.                 $cellNum = 0;
  85.                 $strBuf = '';
  86.                
  87.                 $this->arShortAddr[$addrNum] = array();
  88.                
  89.                 for ($i = 0; $i < strlen($row); $i++) {                    
  90.                     if ($row[$i] == ':') {                        
  91.                         if ( strlen($strBuf) == 0 ) {
  92.                             $this->arShortAddr[$addrNum][$cellNum] = 'L';
  93.                         } else
  94.                             $this->arShortAddr[$addrNum][$cellNum] = $strBuf;
  95.                        
  96.                         $strBuf = '';
  97.                         $cellNum++;
  98.                     } else
  99.                         $strBuf .= $row[$i];
  100.                 }  
  101.                
  102.                 $addrNum++;
  103.             }
  104.         }
  105.        
  106.         /*
  107.          * Метод - заменяет L поля массивов необходимым количеством ячеек с 0
  108.          * Все манипуляции производятся над массивом $arShortAddr
  109.          */        
  110.         function resizeAddr() {
  111.            
  112.         }        
  113.     }
  114.  
  115.     $oDecodeShortIPv6 = new DecodeShortIPv6();
  116. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement