Autor Zpráva
Hacafrakus
Profil *
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
Pro parsovani souboru pouzij fci parse_ini_file() a mas vystarano..
Kcko
Profil
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
Kcko:
proc na mne ? :-)

Neprecetl jsem si cely prispevek a tak jsem odpovedel jen na pulku..
Kcko
Profil
fos4:
Sorry ;) sem nevyspalej
Hacafrakus
Profil *
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   = 
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: