[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выдернуть шаблон через регулярку.
lua
Приветствую всех! Нуждаюсь в вашей помощи господа.

Есть файл, в него записывается данные (текст) через какойто промежуток времени.

Вот пример из файла:

Цитата
L 12/04/2011 - 16:17:38: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" killed "Sanyok<621><STEAM_ID_LAN><621>" with "crossbow" (attacker_position "-225 -825 740") (victim_position "192 -817 740")
L 12/04/2011 - 16:17:40: "pitbull<600><STEAM_ID_LAN><600>" committed suicide with "rpg_rocket" (attacker_position "-497 -822 740")
L 12/04/2011 - 16:17:40: "pitbull<600><STEAM_ID_LAN><600>" killed "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" with "rpg_rocket" (attacker_position "-497 -822 740") (victim_position "-465 -822 740")
L 12/04/2011 - 16:17:44: "Player<620><STEAM_ID_LAN><620>" committed suicide with "rpg_rocket" (attacker_position "815 -812 740")
L 12/04/2011 - 16:17:54: "[komanda2]Mapk<625><STEAM_0:0:695887895><625>" say "Здорова Максим =))"
L 12/04/2011 - 16:17:55: "Player<620><STEAM_ID_LAN><620>" killed "Sanyok<621><STEAM_ID_LAN><621>" with "shotgun" (attacker_position "232 12 48") (victim_position "12 -22 48")
L 12/04/2011 - 16:17:56: "Den<622><STEAM_0:0:837209638><622>" committed suicide with "rpg_rocket" (attacker_position "721 995 48")
L 12/04/2011 - 16:17:56: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" killed "S.T.A.L.K.E.R.<611><STEAM_ID_LAN><611>" with "tripmine" (attacker_position "541 -898 48") (victim_position "2 -484 164")
L 12/04/2011 - 16:18:01: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" say "привет."


Как вы видите, тут барахолка =)

Мне отсюда надо выдернуть сообщения пользователей, в таком шаблоне:

Цитата
12/04/2011 - 16:17:54 Ник_игрока: Сообщение_игрока


и отобразить к примеру через echo или print.



Спустя 6 минут, 35 секунд (4.12.2011 - 22:23) Dezigo написал(а):
берусь за 12 долларов

Спустя 32 секунды (4.12.2011 - 22:24) Winston написал(а):
Может я плохо в этом понимаю, но покажи мне где здесь имя игроков и сообщения ?

Спустя 18 секунд (4.12.2011 - 22:24) Игорь_Vasinsky написал(а):
ну а в чём проблемы?

file_get_contents() считал
stat() mtime - посмотрел время послед модификации
шаришь регляркой и выдёргиваешь.

Спустя 32 секунды (4.12.2011 - 22:25) Семён написал(а):
Цитата (Winston @ 4.12.2011 - 23:24)
Может я плохо в этом понимаю, но покажи мне где здесь имя игроков и сообщения ?

Цитата
L 12/04/2011 - 16:18:01: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" say "привет."

Спустя 33 секунды (4.12.2011 - 22:25) Игорь_Vasinsky написал(а):
Winston
наверн

L 12/04/2011 - 16:18:01: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" say "привет."

Спустя 1 минута, 23 секунды (4.12.2011 - 22:27) Winston написал(а):
Да всё уже, раздуплился unsure.gif

Спустя 7 минут, 46 секунд (4.12.2011 - 22:34) Winston написал(а):
preg_match_all('#([ \d:/-]{24}).*](.*)<\d+>.*say "(.*)"#isuU', $str, $match);
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';

Спустя 35 минут, 33 секунды (4.12.2011 - 23:10) lua написал(а):
Вы у жменя извините, но я плохо еще плохо понимаю php

я сделал так:

 <?php
$str = file_get_contents('mylog.log');
preg_match_all('#([ \d:/-]{24}).*](.*)<\d+>.*say "(.*)"#isuU', $str, $match);
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
?>


выдает в браузере вот что.

Array
(
[0] => Array
(
)

[1] => Array
(
)

[2] => Array
(
)

[3] => Array
(
)

)


ps ссори за глупые ошибки, еще раз повторюсь, что очень слабо знаком с php.

Спустя 13 минут, 22 секунды (4.12.2011 - 23:23) Winston написал(а):
Попробуй убрать модификатор u, если у тебя кодировка windows-1251. А скорее так и есть, если txt-файл.

Спустя 35 минут, 16 секунд (4.12.2011 - 23:59) I++ написал(а):
#include <amxmodx>
#include <cstrike>


public plugin_init()
{
// Register the plugin
register_plugin("[AMX] Chat Logger", "0.0.1", "NullWarez")

// Client say commands
register_clcmd("say", "hook_say")
register_clcmd("say_team", "hook_say")
}

public hook_say(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED

static chat[192], name[32], logdata[223]

// Process what he is speaking
read_args(chat, 191)
remove_quotes(chat)

if(equal(chat, ""))
return PLUGIN_CONTINUE

// Get his name
get_user_name(id, name, 31)

// 12/04/2011 - 16:17:54 Ник_игрока: Сообщение_игрока
formatex(logdata, charsmax(logdata), "%s: %s", name, chat)
log_to_file("user_chat.log", logdata)

return PLUGIN_CONTINUE
}


Читаешь файл построчно и выводишь.

Спустя 45 минут, 35 секунд (5.12.2011 - 00:44) I++ написал(а):
Вот улучшил :D

#include <amxmodx>
#include <cstrike>
#include <sqlx>

#define DB_RECCONECT_TIME 5.0 // Time to reconnect db if fail
#define DB_TABLE_NAME "chat_logger"

// ERROR VAR

new g_ErrorCode, g_ErrorMsg[256]
// SQL VAR
new Handle:g_hSQLTuple, Handle:g_hSQLConnection, g_szQuery[256]

/*================================================================================
[INIT]
=================================================================================*/


public plugin_init()
{
// Register the plugin
register_plugin("[AMX] Chat Logger", "0.1.0", "NullWarez")

// Client say commands
register_clcmd("say", "hook_say")
register_clcmd("say_team", "hook_say")

// Connect to MySQL
ConnectDataBase();
}

/*================================================================================
[FUNCTIONS]
=================================================================================*/


public ConnectDataBase()
{
g_hSQLTuple = SQL_MakeStdTuple()
g_hSQLConnection = SQL_Connect(g_hSQLTuple, g_ErrorCode, g_ErrorMsg, 256)

if(g_hSQLConnection == Empty_Handle)
{
set_task(DB_RECCONECT_TIME, "ConnectDataBase")
log_amx("ConnectDataBase(): SQL Error #%d - %s", g_ErrorCode, g_ErrorMsg)
}

return PLUGIN_CONTINUE;
}

public hook_say(id)
{
if(g_hSQLConnection == Empty_Handle)
return PLUGIN_CONTINUE

if(!is_user_connected(id))
return PLUGIN_HANDLED

static chat[192], name[32]

// Process what he is speaking
read_args(chat, 191)
remove_quotes(chat)

if(equal(chat, ""))
return PLUGIN_CONTINUE

// Get his name
get_user_name(id, name, 31)

// Escape screening
replace_all(name, 31, "'", "\'")
replace_all(chat, 191, "'", "\'")

// Sql request
formatex(g_szQuery, charsmax(g_szQuery),"INSERT INTO `%s`.`chat` (`id` ,`nick` ,`text`) VALUES (NULL, '%s', '%s');", DB_TABLE_NAME, name, chat);
SQL_SimpleQuery(g_hSQLConnection, g_szQuery)

return PLUGIN_CONTINUE
}


Таблица SQL

CREATE TABLE IF NOT EXISTS `chat` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nick` varchar(31) NOT NULL,
`text` varchar(191) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;


Не идеал, но работать будет, если SQL на локалхосте будет стоять, проблем не возникнет. Если лишний раз его не дергать.

Ах да забыл откоментить, что делает код. Этот код, плагин amxmodx, который заносит в базу данных логи чата. Из php я надеюсь знаешь как подключаться к базе MySQL и получать из неё данные.

Эх ностальгия по пауну и алиедмодс форуму )))

P.S.S

Простите за не соблюдение венгерской нотации )

Спустя 2 минуты, 35 секунд (5.12.2011 - 00:47) Игорь_Vasinsky написал(а):
Свернутый текст
это как у тя вышло 2 строчки на полотенца заменить?

Спустя 24 минуты, 41 секунда (5.12.2011 - 01:11) RCuPeR написал(а):
Свернутый текст
А на каком языке это вообще написано ?

Спустя 21 минута, 10 секунд (5.12.2011 - 01:33) I++ написал(а):
Цитата (RCuPeR @ 5.12.2011 - 02:11)
Свернутый текст
А на каком языке это вообще написано ?

Если интересно вот тут много интересного об пауне.

Свернутый текст

Спустя 8 часов, 44 минуты, 54 секунды (5.12.2011 - 10:18) lua написал(а):
Уважаемый I++ самый прикол в том, что сервер не у меня стоит. Мне доступен только файл лога этого сервера, которы лежит на фтп и обновляется за какоето промежуточное время. ftp:/lalala/mylog.log

Цитата
Попробуй убрать модификатор u, если у тебя кодировка windows-1251. А скорее так и есть, если txt-файл.


у меня действительно кодировка windows-1251.

сделал так:

<?php
$str = file_get_contents('mylog_2.log');
preg_match_all('#([ \d:/-]{24}).*](.*)<\d+>.*say "(.*)"#isU', $str, $match);
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
?>


ВЫВОД:

Цитата
Array
(
    [0] => Array
        (
            [0] =>  12/04/2011 - 16:17:38: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" killed "Sanyok<621><STEAM_ID_LAN><621>" with "crossbow" (attacker_position "-225 -825 740") (victim_position "192 -817 740")
L 12/04/2011 - 16:17:40: "pitbull<600><STEAM_ID_LAN><600>" committed suicide with "rpg_rocket" (attacker_position "-497 -822 740")
L 12/04/2011 - 16:17:40: "pitbull<600><STEAM_ID_LAN><600>" killed "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" with "rpg_rocket" (attacker_position "-497 -822 740") (victim_position "-465 -822 740")
L 12/04/2011 - 16:17:44: "Player<620><STEAM_ID_LAN><620>" committed suicide with "rpg_rocket" (attacker_position "815 -812 740")
L 12/04/2011 - 16:17:54: "[komanda2]Mapk<625><STEAM_0:0:695887895><625>" say "Здорова Максим =))"
            [1] =>  12/04/2011 - 16:17:55: "Player<620><STEAM_ID_LAN><620>" killed "Sanyok<621><STEAM_ID_LAN><621>" with "shotgun" (attacker_position "232 12 48") (victim_position "12 -22 48")
L 12/04/2011 - 16:17:56: "Den<622><STEAM_0:0:837209638><622>" committed suicide with "rpg_rocket" (attacker_position "721 995 48")
L 12/04/2011 - 16:17:56: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" killed "S.T.A.L.K.E.R.<611><STEAM_ID_LAN><611>" with "tripmine" (attacker_position "541 -898 48") (victim_position "2 -484 164")
L 12/04/2011 - 16:18:01: "[komanda1]Maxim<616><STEAM_0:0:654865451><616>" say "привет."
        )

    [1] => Array
        (
            [0] =>  12/04/2011 - 16:17:38:
            [1] =>  12/04/2011 - 16:17:55:
        )

    [2] => Array
        (
            [0] => Maxim
            [1] => Maxim
        )

    [3] => Array
        (
            [0] => Здорова Максим =))
            [1] => привет.
        )

)

Спустя 12 минут, 26 секунд (5.12.2011 - 10:30) Winston написал(а):
Цитата (lua @ 5.12.2011 - 09:18)
ВЫВОД

Ну вот вам и выдернуло то что надо, осталось только перебрать $match с помощью foreach

Спустя 7 часов, 11 минут, 28 секунд (5.12.2011 - 17:41) I++ написал(а):
Цитата
Уважаемый I++ самый прикол в том, что сервер не у меня стоит. Мне доступен только файл лога этого сервера, которы лежит на фтп и обновляется за какоето промежуточное время. ftp:/lalala/mylog.log


Это печально, если лог не чистить, он достигнет больших объемов. Да и синхронизации не выйдет, даже если делать через lock, который не доступен скорее всего может возникнуть потеря данных.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.