Autor | Zpráva | ||
---|---|---|---|
Hacafrakus Profil * |
#1 · Zasláno: 18. 12. 2009, 10:30:51
Zdravím,
nemám moc zkušeností s parsováním a potřeboval bych projíždět log ve kterém jsou zapsány bany na game serveru. Takhle vypadá část s banem. [ban] name = ^3Banned^5User^1(Nick) date = 10.12.2009 12:45:10 expires = 12.1.2010 12:45:10 reason = Cheater ip = 79.82.200.165 guid = 4s135a4f3a5d13adg5 banner = ^1H^3acafrakus Takže je jasné že to potřebuju dostat do proměnných, které zaoíšu do databáze. Ten barevný kód (^1 - červená např.) si odstraním sám, jednou zapíšu nick i s barvami a pro hledání i bez barev. Ten log se projede každých 24 hodin, zapíše se do tabulky a po dalším parsování se celá tabulka vyprázdní. Teď mě napadá, dá se nějak udělat aby se po vypráznění tabulky auto_increment nastavilo na 0, tzn. aby se pokaždé začal sloupce id číslovat odznova. Rovnou napíšu i další část, co potřebuji vyparsovat z toho samého logu. [admin] name = ^1H^3acafrakus level = 8 flags = To půjde do jiné tabulky. Nějak jsem doteď nepochopil regulérní výrazy a kde jsem mohl jsem radši použil explode :] Děkuji tomu kdo poradí, nebo nakopne. |
||
fos4 Profil |
#2 · Zasláno: 18. 12. 2009, 11:31:11
Pro parsovani souboru pouzij fci parse_ini_file() a mas vystarano..
|
||
Kcko Profil |
#3 · Zasláno: 18. 12. 2009, 12:12:56 · Upravil/a: Kcko
Hacafrakus:
„Teď mě napadá, dá se nějak udělat aby se po vypráznění tabulky auto_increment nastavilo na 0, tzn. aby se pokaždé začal sloupce id číslovat odznova.“ http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html |
||
fos4 Profil |
#4 · Zasláno: 18. 12. 2009, 12:54:03
Kcko:
proc na mne ? :-) Neprecetl jsem si cely prispevek a tak jsem odpovedel jen na pulku.. |
||
Kcko Profil |
#5 · Zasláno: 18. 12. 2009, 13:22:42
fos4:
Sorry ;) sem nevyspalej |
||
Hacafrakus Profil * |
#6 · Zasláno: 18. 12. 2009, 17:46:57
Bohužel ta funkce parse_ini_file nelze použít. Soubor obsahuje i závorky a zasekává se to na řádku 55.
[admin] name = ^1[^7FC^1]^7$omebody^1|^7NKU guid = 619DBB3A5975A3686F1EF7AB92B81D04 level = 7 // Toto je řádek 55 flags = |
||
Časová prodleva: 3 dny
|
|||
fos4 Profil |
Ten format ini je pro PHP spatny.
Udelej preg_match $files = file("soubor.ini"); for(...) { $line = $files[$i]; if(preg_match('/(.[^=]*)=(.*)/', $line, $matches)) { echo $matches[1] ." = ".$matches[2]; } Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Majkl578 Profil |
#8 · Zasláno: 21. 12. 2009, 13:12:25
Pokud jsem to pochopil dobře, tak v logu je několik sekcí [ban] jejichž obsah se má parsovat do pole s asociativními klíči.
Pro [ban]: preg_match_all("~\[ban\] name[ ]+\=[ ]+(?P<name>[^\n]+) date[ ]+\=[ ]+(?P<date>[^\n]+) expires[ ]+\=[ ]+(?P<expires>[^\n]+) reason[ ]+\=[ ]+(?P<reason>[^\n]+) ip[ ]+\=[ ]+(?P<ip>[^\n]+) guid[ ]+\=[ ]+(?P<guid>[^\n]+) banner[ ]+\=[ ]+(?P<banner>[^\n]+)~s", $input, $matches, PREG_SET_ORDER); var_dump($matches); Pro [admin]: preg_match_all("~\[admin\] name[ ]+\=[ ]+(?P<name>[^\n]*) level[ ]+\=[ ]+(?P<level>[^\n]*) flags[ ]+\=[ ]+(?P<flags>[^\n]*)~su", $input, $matches, PREG_SET_ORDER); Vstupní data jsou v obou případech v proměnné $input. |
||
Časová prodleva: 14 let
|
0