Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- /**
- * Задание А
- *
- * Стандартный файл с входными данными - input.txt
- * Стандартный файл с выходными данными - output.txt
- *
- * Другие имена файлов задаются в качестве параметров констуктора класса
- */
- class DecodeShortIPv6 {
- private $arFileData; // Данные из файла
- private $arShortAddr; // Короткий адрес IPv6, разбитый по ячейкам
- private $arFullAddr; // Строки с полным адресом IPv6
- /*
- * Конструктор класса
- * $inFName - имя входного файла
- * $outFName - имя выходного файла
- */
- function __construct($inFName = 'input.txt', $outFName = 'output.txt') {
- // Считывание входных данных
- try { $this->loadDataFromFile($inFName); }
- catch (Exception $e) {
- echo "При считывание файла $inFName возникла ошибка: ".$e->GetMessage();
- exit;
- }
- // Обработка входных данных
- try { $this->procInData(); }
- catch (Exception $e) {
- echo "При обработке входных данных возникла ошибка: ".$e->GetMessage();
- exit;
- }
- // Замена пустого пространства с самой большой группой нулей - самими нулями
- $this->resizeAddr();
- /*// Рассширение адресов до полного формата
- $this->setFullAddr();
- // Запись результата в файл
- try { $this->saveResToFile($outFName); }
- catch (Exception $e) {
- echo "При записи в файл $outFName возникла ошибка: ".$e->GetMessage();
- exit;
- }*/
- }
- /*
- * Метод - чтение данных из файла
- * Параметры: $FName - имя файла
- *
- * Считывает все строки файла и параллельно их преобразует, записывая в
- * массив $arVals
- */
- function loadDataFromFile($FName) {
- // Проверка наличия имени файла
- if ( strlen($FName) == 0 )
- throw new Exception('Не задано имя файла');
- // Проверка существования самого файла
- if ( !file_exists($FName) )
- throw new Exception('Файл не существует');
- // Проверка размера файла
- if ( !filesize($FName) )
- throw new Exception('Файл пуст');
- // Считывание данных всего файла в массив
- $this->arFileData = file($FName);
- }
- /*
- * Метод - разбивает строку с разделителями ячеек адреса (:) - на ячейки массива
- * и сохраняет получившуюся структуру в $arShortAddr. Если встретилась пустая ячейка (::) -
- * ставит обозначение L, для дальнейшей доработки массива.
- */
- function procInData() {
- $addrNum = 0;
- $this->arShortAddr = array();
- foreach($this->arFileData as $row) {
- $cellNum = 0;
- $strBuf = '';
- $this->arShortAddr[$addrNum] = array();
- for ($i = 0; $i < strlen($row); $i++) {
- if ($row[$i] == ':') {
- if ( strlen($strBuf) == 0 ) {
- $this->arShortAddr[$addrNum][$cellNum] = 'L';
- } else
- $this->arShortAddr[$addrNum][$cellNum] = $strBuf;
- $strBuf = '';
- $cellNum++;
- } else
- $strBuf .= $row[$i];
- }
- $addrNum++;
- }
- }
- /*
- * Метод - заменяет L поля массивов необходимым количеством ячеек с 0
- * Все манипуляции производятся над массивом $arShortAddr
- */
- function resizeAddr() {
- }
- }
- $oDecodeShortIPv6 = new DecodeShortIPv6();
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement