Как разобрать дату ондного формата в дату понятную для MySQL

Sandr

Guest
Как разобрать дату ондного формата в дату понятную для MySQL

Привет вот собственно вопрос

ServU пишет в лог даты такого формата - 20Jan03
а хотся ее разобрать в формат для MySQL - yy,mm,dd
вот строки
[4] Mon 20Jan03 21:58:16 - (000113) Receiving file f:\other\upload\_остолом.avi
[5] Mon 20Feb03 22:00:39 - (000114) Connected to 10.0.0.17 (Local address 10.0.0.99)
вот что я придумал - но чегойто невыходит - скрипт всеравно пишет месяц 01
PHP:
#*************************************************************************
# переменные и пр
#*************************************************************************
include ('./globals.php'); 
$statfile = file ('c:/apache/apache/htdocs/sandr/ftp.log');

#*************************************************************************
# функции
#*************************************************************************

function month (){
	if ($regs = 'Jan') {
	$month = '01';
	echo $month;
	}
	elseif ($regs = 'Feb') {
	$month = '02';
	echo $month;
	}
	elseif ($regs = 'Mar') {
	$month = '03';
	echo $month;
	}
}

#*************************************************************************
# парсер
#*************************************************************************

foreach ($statfile as $line_num => $line) {
    if (ereg ('([0-9]{2})([A-Za-z]{3})([0-9]{2})(.*)', $line, $regs)) {
		echo "Date - $regs[3]:";
    	month ($regs[2]);
		echo ":$regs[1]<br><br>";
    	} else {
		}
}
 

Sandr

Guest
Автор оригинала: Demiurg
[m]substr[/m] тебе поможет.
Вот что я написал
PHP:
foreach ($statfile as $line_num => $line) {
//   echo "<U>Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "</u><br>\n";
    if (ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2})(.*)', $line, $regs)) {
		echo substr($regs[1], 0, 2);
    	month ($month = substr($regs[1], 2, 3));
		echo substr($regs[1], -2);
		Echo '<br><br>';
    	} else {
		}
}
Проблема в том что скрипт передает функции разные результаты - Jan с первой строки
и Feb со второй
Но функция - всеравно видит/или получает/ только один и тотже блок Jan
Вот в чем фишка?!
 

Demiurg

Guest
это что такое :
month ($month = substr($regs[1], 2, 3));

зачем тебе регулярные выражения, тем более eregi, у тебя все фиксированого формата. Пеервые 3 символа - день недели, потом пробел, потом 2 символа - день и тд.
вот сделай для каждого substr, потом и соберай дату в нужном формате.
 

Sandr

Guest
Дело в том что это часть большого парсера :)
Обсуждалось здесь
и просто я пытаюсь счас раазобраться с датой
а все остальное я уже вроде разобрал!
 

Sandr

Guest
А потом ведь насколько я понимаю MySQL непоймет дату в виде цифр и букв
Ей подавай только цифры 01:02:03
(помоему?)
 

RomikChef

Guest
мне вот интересно, чем мотивировался выбор форума для вопроса.
Тебе, значит, парсить надо логи, чтобы в mysql положить.
И поэтому ты свой вопрос задал в форуме по mysql.
а если бы тебе пришлось каталог запчастей составлять - ты бы на авто-ру спрашивать пошел бы?
 

RomikChef

Guest
тебе не function month() нежна, а МАССИВ
$month=array(
'Jan'=>1,
'Feb'=>2,
'Mar'=>3,
'Apr'=>4,
'May'=>5
...
'Dec'=>12);

и писать $month[$regs[3]]

а если уж функцию собрался использовать, то при объявлении ее ты бы хоть указал, что ПАРАМЕТР передавать будешь.

а на счет субстр ты бы прислушался.
логи, как я понимаю, вещь большая.
с субстром этот скртипт будет работать в 10 раз быстрее, чем с ерегом.
Но, дело, конечно, хозяйское...
 

Sandr

Guest
Вот что получилось!
Работает - но я так понимаю код очень грязный
кто подскажет как по красивей сделать
задача сделать 3 таблицы в MySQL -
1я дата, время, номер сесии, какой IP
2я дата, время, номер сесии, чего делал
3я дата, время, номер сесии, время онлайн
PHP:
#*************************************************************************
include ('./globals.php'); 
$statfile = file ('d:/apache/htdocs/sandr/ftp.log');
$table1 = 'ftp_index';
$table2 = 'ftp_todo';
$table3 = 'ftp_online';
$dbname = 'ftp';

$month=array( 
'Jan'=>'01', 
'Feb'=>'02', 
'Mar'=>'03', 
'Apr'=>'04', 
'May'=>'05', 
'May'=>'06', 
'Jun'=>'07', 
'Jul'=>'08', 
'Aug'=>'09', 
'Sep'=>'10', 
'Nov'=>'11', 
'Dec'=>'12'
); 

#*************************************************************************

$conn = mysql_pconnect($host, $username, $password);
			 if (!$conn) {echo "?шибка подключени? к базе данных.\n"; exit;}
mysql_select_db ($dbname);

foreach ($statfile as $line_num => $line) {
    if ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Connected to) ((10.0.0.)([0-9]{2})) (.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table1." VALUES ('', '$date', '$regs[2]', '$regs[7]', '$regs[5]')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Closing connection for user) ([^0-9{2}]{1,})([^\con]{8})', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table3." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[8]')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Receiving file) (.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table2." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[7]', 'ulpt')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Error receiving file) ([^,]*)(.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table2." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[7]', 'ULer')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Receiv file) ([^(]*)(.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table2." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[7]', 'ulok')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Sending file) (.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table2." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[7]', 'dlpt')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Error sending file) ([^,]*) (.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table2." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[7]', 'dler')");
    	} elseif ( ereg ('([0-9]{2}[A-Za-z]{3}[0-9]{2}) ([^-]*) ([^(]*) (\(([0-9]{6})\)) (Sent file) ([^(]*)(.*)', $line, $regs)) {
			$date = ''.substr($regs[1], -2).':'. $month[substr($regs[1], 2, 3)].':'.substr($regs[1], 0, 2).'';
			mysql_query("insert into ".$table2." VALUES ('', '$date', '$regs[2]', '$regs[5]', '$regs[7]', 'dlok')");
    	} else {
		}
}

mysql_close ($conn);

#*************************************************************
 

RomikChef

Guest
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!
разбор регулярным выражением надо делать ОДИН РАЗ!!!!

Так до тебя наверняка лучше дойдет.
И потом пользоваться переменными, полученными при разборе
 

Sandr

Guest
:))))
Точно счас смотрю что я ночью понаписал - сам дивлюсь :)
 

Sandr

Guest
Автор оригинала: RomikChef
мне вот интересно, чем мотивировался выбор форума для вопроса.
А гдеж еще - как не на форуме

PHP & Mysql
Здесь решаются все вопросы относительно MySQL


решать вопрос конвертации даты в понятный для MySQL формат????
 

Demiurg

Guest
а если бы тебе надо было сконвертить дату в удобную для китайцев ты бы где писал ?
 

RomikChef

Guest
mysql_query надо писать ОДИН РАЗ.

ты хоть сам-то видишь, что у тебя в запросах меняется только одно слово?
и именно его надо присваивать переменной, которую потом в запрос и вставлять?
 

RomikChef

Guest
Юрочка, пожалей лучше своего.
И заодно - меня, который читает твои бессмысленные сообщения.
 

Sandr

Guest
Автор оригинала: Demiurg
а если бы тебе надо было сконвертить дату в удобную для китайцев ты бы где писал ?
ААА понятно
ну так-бы и написали
Что обсуждать вопросы конвертации данных в понятные MySQL форматы
на форуме для китайцев

а то написали -
Здесь решаются все вопросы относительно MySQL
Вот я и заблудился :)
 
Сверху