Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2015, 11:17   #11
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Внимание! далее писал вслепую, так для общего понимания..

Код:
class parseLog {

	public function __construct() 
	{	
		$this->searchFile();
	}

	public function searchFile()
	{
	
		$a = "/usr/home/support/Downloads/dbmacs/";

		$dir = "/usr/home/support/Downloads/dbmacs/";
		$temp = "/([a-z]{1,}\_[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,})\_([a-z0-9]{1,})\-([a-z0-9]{1,}.*).dbmac/xi";
		if ($handle = opendir($dir)) {
			while (false !== ($entry = readdir($handle))) {
				if ($entry != "." && $entry != "..") {
					if (preg_match($temp, $entry, $m1)) {
						$loadFile = file($a.$entry);
						$log[] = $this->parseFile($loadFile);
					}
				}
			}
			closedir($handle);
                        return $log;
		}
	
	}
	
	public function parse($fileName)
	{
	
		$log = file($fileName);
		
		foreach($log as $key => $value)
		{	
			$mac = explode(" ",$value);
			// Для длинка
			if((isset($mac[2])) && (isset($mac[3])) && (strlen($mac[2])==17))
			{	
				$mac_addr = str_replace('.','-', $mac[2]);
				$mas["dlink"][$mac[3]][] = $mac_addr;
			}
			else
			{
				// проверить на кошку
				if((isset($mac[1])) && (isset($mac[3])) && (strlen($mac[1])==14))
				{
					$mas["cisco"][trim($mac[3])][] = $mac[1];
				}
			}
		}
		
		return $mas;		
	
	}
	
	
}

$logs = new parseLog();
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 02.04.2015 в 11:37.
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 12:29   #12
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Как работает
Код:
$this->parseFile($loadFile);
я не могу понять принцип работы этой строки
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 13:06   #13
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
Как работает
Код:
$this->parseFile($loadFile);
я не могу понять принцип работы этой строки
$this это обращение к переменной или методу в контексте класса.

на каждой итерации передаю имя путь и имя файла в метод parse который уже делает грязную работу, и возвращает массив.

Вы книжечки про ООП почитайте.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 13:23   #14
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Уже понял, был глупый вопрос, извините)

Сначала оно не работало, потому что я подставил свои файлы, они не тхт, вот почему я не мог их прикрепить. Они формата .*dbmac.
Код рабочий, я протестил так же... как вы описали, c txt файлом. Переименовал, все равно не катит )
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 13:24   #15
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
Переименовал, все равно не катит )
что то не работает?

ну так упакуйте файл в zip и прикрепите сюда
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 13:31   #16
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
что то не работает?

ну так упакуйте файл в zip и прикрепите сюда
Вот эти файлы (не все, все нет смысла, 2 длинка и 2 циско)
Вложения
Тип файла: zip dbmac.zip (9.0 Кб, 7 просмотров)
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 13:33   #17
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
Вот эти файлы (не все, все нет смысла, 2 длинка и 2 циско)
ну и чем же они не текстовые?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 13:47   #18
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
ну и чем же они не текстовые?
я изменил путь к файлу, вместо 1.txt на file_name.dbmac, с учетом директории, и массив = null
viks1 вне форума Ответить с цитированием
Старый 02.04.2015, 14:11   #19
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
я изменил путь к файлу, вместо 1.txt на file_name.dbmac, с учетом директории, и массив = null
слишком типичные ошибки, учитесь отладкe.

ну кто вам мешает посмотреть после

Код:
$log = file($fileName);
что храниться в $log ?

мне не мешает ... вот что там лежит (я использую ваш файл с вашим расширением)

Код:
Array
(
    [0] => 225  moldova-voip                     00-0C-29-EB-0E-55 25   Dynamic

    [1] => 225  moldova-voip                     00-19-06-8B-E8-D0 25   Dynamic

    [2] => 499  mgmt                             BC-F6-85-EA-0B-80 CPU  Self

    [3] => 499  mgmt                             D0-50-99-1C-DF-60 25   Dynamic

)

дело в том что вы дали мне пример где у вас пробел между портом и макаом и т.д в реальном файле у вас и пробел и табуляция естественно explode не работает.

вот поправка используя регулярное выражение. по кошке сделайте сами


Код:
			$mac_template="/[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}\-[\d|A-F]{2}/i";
			preg_match_all($mac_template,$value,$macs); 
			
			// Для длинка
			if((isset($macs[0])) && (isset($mac[3])) && (strlen($macs[0])==17))
			{	
				$mac_addr = str_replace('.','-', $macs[0]);
				$mas["dlink"][$mac[3]][] = $mac_addr;
			}
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 02.04.2015 в 14:32.
Stanislav вне форума Ответить с цитированием
Старый 02.04.2015, 16:13   #20
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Спасибо огромное, вы натолкнули на мысль как реализовать то, что хотел.
Вот, соединил свой и ваш вариант получилось как то так:
Код:
function parse($l, $f) {
    $mac_template = "/([0-9]{1,3})[\s]{1,}([0-9a-f]{4}\.[0-9a-f]{4}\.[0-9a-f]{4})[\s]{1,}[a-z]{1,}[\s]{1,}([a-z0-9\/]{3,})/xi";
    $mac_template2 = "/([0-9]{1,})\s{1,}.{1,20}\s{1,}([0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,}\-[0-9a-f]{1,})\s{1,}([0-9]{1,})\s{1,}([a-z]{1,})/xi";
    for ($i = 0; $i < $l+1; $i++) {
        if (preg_match($mac_template, $f[$i], $m)) {                 
            $mac_a=str_replace(".", "", $m[2]);  
            $mas[$m[3]][]=$mac_a;
        }    
        if (preg_match($mac_template2, $f[$i], $m)) {   
            
             $mac_a=str_replace("-", "", $m[2]);           
             $mas[$m[3]][]=$mac_a;
        }
       
    }
   return $mas;
    
}


$a = "/usr/home/support/Downloads/dbmacs/";
$dir = "/usr/home/support/Downloads/dbmacs/";
$temp = "/([a-z]{1,}\_[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,})\_([a-z0-9]{1,})\-([a-z0-9]{1,}.*).dbmac/xi";
if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            if (preg_match($temp, $entry, $m1)) {
                $loadFile = file($a.$entry);
                $len = count($loadFile);             
                $t=parse($len, $loadFile);
                $result[$m1[1]][]=$t;
                 var_dump($result);
            }
        }
    }
    closedir($handle);
}
Я взял за принцип вот эти(вашу) строчки кода:
Код:
$mas["dlink"][$mac[3]][] = $mac_addr;
и
Код:
$mas["cisco"][trim($mac[3])][] = $mac[1];
в итоге, результат формировал за пределами функции
Код:
$t=parse($len, $loadFile);
$result[$m1[1]][]=$t;
var_dump($result);
Еще раз спасибо )
viks1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Massiv dima755 Помощь студентам 0 20.05.2013 11:42
Pascal. Massiv Eithate Помощь студентам 4 17.12.2012 00:38
massiv legita Помощь студентам 2 19.01.2011 10:54
Assembler,massiv @@@Сергей@@@ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 07.01.2010 14:01