Daten aus log Datei auslesen ?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Butterzeugs
Mitglied
Beiträge: 3
Registriert: 29.04.2010 14:35

Daten aus log Datei auslesen ?

Beitrag von Butterzeugs »

Hallo zusammen ,

ich möchte gerne aus der Logdatei meines Gameservers die Daten der Spieler auslesen und in eine Datenbank schreiben.
Nun habe ich folgendes Problem.
In der vom Serverer erstellten Logdatei werden Datensätze wie dieser erstellt:

Code: Alles auswählen

class Session
{
        mission="1.FjgFL DomiOA! West Ranked noMods[2.54]";
        island="takistan";
        gameType="COOP";
        duration=12444.732;
        class Player1
        {
                name="-[506th]- SL Raziel";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player2
        {
                name="BOB";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player3
        {
                name="Maxidoo";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player4
        {
                name="Mozzarella";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player5
        {
                name="sebbo";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player6
        {
                name="Ssshift79";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player7
        {
                name="Taliban";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=0;
        };
        class Player8
        {
                name="[1.FjgFL]Butterzeugs";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=1;
        };
        class Player9
        {
                name="GLitch-WubWub.exe";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=0;
                customScore=0;
                killsTotal=0;
                killed=2;
        };
        class Player10
        {
                name="[L.S.G]Synex";
                killsInfantry=-1;
                killsSoft=0;
                killsArmor=0;
                killsAir=0;
                killsPlayers=-1;
                customScore=0;
                killsTotal=-1;
                killed=1;
        };
        class Player11
        {
                name="maxi";
                killsInfantry=0;
                killsSoft=0;
                killsArmor=0;
                killsAir=-1;
                killsPlayers=0;
                customScore=2;
                killsTotal=-3;
                killed=2;
        };
};
Da sich dieser Datensatz aber bei jedem Neustart des Servers neu schreibt muß ich mich an den Namen der Spieler halten und kann nicht einfach Player1 ... 2 ... usw. speichern.
Das bekomme ich leider nicht hin.

Ich versuche also die Daten der Spieler anhand Ihres Names in einer Datenbank zuspeichern und mein Problem ist momentan das ich es einfach nicht schaffe aus der LogDatei einen anständigen Spielerdatensatz zugewinnen.

Für Tips und Hilfe wäre ich sehr verbunden.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: Daten aus log Datei auslesen ?

Beitrag von cYbercOsmOnauT »

Viel erklären kann man da nicht. Höchstens eine Lösung anbieten. ;)

Code: Alles auswählen

# Datei in einen String einlesen
$logdata = file_get_contents($logfile);
# Zeilenvorschübe entfernen
$logdata = str_replace(array("\n", "\r"), '', $logdata);
# Störende Tabs und schliessende Klammern nebst Semikolons und Spaces entfernen
$logdata = preg_replace(array('#\s{2,}#', '#\s+};\s*#'), array(' ', ''), $logdata);
# Die unbenötigte Spielklasse entfernen
$logdata = substr($logdata, strpos($logdata, 'class Player'), -3);
# Spielerzeilen in ein Array packen
$userlines = preg_split('#class\sPlayer[0-9]+\s+\{\s+#', $logdata);
# Der erste Treffer ist leer und somit unnötig
array_shift($userlines);
# In diesem Array landen die Spielerdaten am Ende
$userdata = array();
foreach($userlines AS $line) {
    # Die Zeile an den Semikolons aufsplitten
    $tmpSplit = explode(';', $line);
    # Spaces am Anfang und Ende entfernen
    $tmpSplit = array_map('trim', $tmpSplit);
    $linedata = array();
    foreach($tmpSplit AS $data) {
        # Sicher ist sicher
        trim($data);
        # Leer? Dann weiter
        if (!strlen($data))
                continue;
        # Der Keyname ist alles was bis zum = kommt;
        $key = substr($data, 0, strpos($data, '='));
        # Der Wert ist alles was nach dem = kommt
        $val = substr($data, strpos($data, '=')+1);
        # Da die Strings in Anführungsstrichen sind, entfernen wir die bei Bedarf
        $val = $val{0} == '"' ? substr($val, 1, -1) : (int) $val;
        $linedata[$key] = $val;
    }
    $userdata[] = $linedata;
} 
Das Datenpaket von Player1 sieht dann so aus:
[0]=>
array(10) {
["name"]=>
string(19) "-[506th]- SL Raziel"
["killsInfantry"]=>
int(0)
["killsSoft"]=>
int(0)
["killsArmor"]=>
int(0)
["killsAir"]=>
int(0)
["killsPlayers"]=>
int(0)
["customScore"]=>
int(0)
["killsTotal"]=>
int(0)
["killed"]=>
int(0)
}
Grüße,
Tekin
Zuletzt geändert von cYbercOsmOnauT am 13.04.2013 22:09, insgesamt 1-mal geändert.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Butterzeugs
Mitglied
Beiträge: 3
Registriert: 29.04.2010 14:35

Re: Daten aus log Datei auslesen ?

Beitrag von Butterzeugs »

Vielen Dank erstmal !
Antworten

Zurück zu „Coding & Technik“