Vars aus eines String ermitteln

doribell

Mitglied
Hallo,

ich versuche aus diesem String Vars zu bekommen:

(item (name 260) (Index 5) (Image "Wea005") (Action 3 2) (class weapon sword) (code 1 1 1 1) (country 0) (level 17) (wear 1) (limit Knight 1) (range 24) (buy 6973) (sell 1743) (endurance 18) (specialty (aspeed 700) (Attack 45 65) (hit 29) ) )

Den String hole ich aus einer *.txt und dieser entspricht dort einer von über 1000 zeilen. Was ich brauche sind die Werte zwischen die Klammern, in dieser form:
Var = name und 260 der Wert oder Var= Index und 5 der Wert.

Ich hoffe mir kann jemand weiter helfen.
mfg Jens N.
 
Du könntest als erstes mal immer den Wert eines klammernpares rausholen über RegEx und Zeilenweise in eine Textdatei schreiben.

Dann Zeilenweise durchgehen und die Kurzstrings am ersten leerzeichen trennen und in ein array Schreiben dann hast du beide Werte in einem Array.

Das geht sicher auch einfacher aber ich hab jetzt auf die schnelle keine Idee, Probleme würde diese komplizierte Variante jedenfalls bringen wenn die ineinander verschachtelten Klammernpaare ausgelesen werden müssten.
 
Das war in etwa meine erste Herrangehensweise, wobei ich die sofort fallen gelassen habe! Das muss auch anders funktionieren, der file wird von einem Gameserver ausgewertet.

Hier mal der komplette File: inititem.txt
 
hiermit bekommst du deine sachen raus:
PHP:
// search sample with delimiter and modifer (if available) 
$pattern = '/(item)? \((.*) (.*)\)/Uu';

// regex with preg_match_all() evaluate 
preg_match_all($pattern, $TXT, $array);

$TXT = der Inhalt der *.txt-datei,
$array = //bei dem beispiel:
PHP:
Array
(
    [0] => Array
        (
            [0] => item (name 260)
            [1] =>  (Index 5)
            [2] =>  (Image "Wea005")
            [3] =>  (Action 3 2)
            [4] =>  (class weapon sword)
            [5] =>  (code 1 1 1 1)
            [6] =>  (country 0)
            [7] =>  (level 17)
            [8] =>  (wear 1)
            [9] =>  (limit Knight 1)
            [10] =>  (range 24)
            [11] =>  (buy 6973)
            [12] =>  (sell 1743)
            [13] =>  (endurance 18)
            [14] =>  (specialty (aspeed 700)
            [15] =>  (Attack 45 65)
            [16] =>  (hit 29)
        )

    [1] => Array
        (
            [0] => item
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
            [7] => 
            [8] => 
            [9] => 
            [10] => 
            [11] => 
            [12] => 
            [13] => 
            [14] => 
            [15] => 
            [16] => 
        )

    [2] => Array
        (
            [0] => name
            [1] => Index
            [2] => Image
            [3] => Action
            [4] => class
            [5] => code
            [6] => country
            [7] => level
            [8] => wear
            [9] => limit
            [10] => range
            [11] => buy
            [12] => sell
            [13] => endurance
            [14] => specialty
            [15] => Attack
            [16] => hit
        )

    [3] => Array
        (
            [0] => 260
            [1] => 5
            [2] => "Wea005"
            [3] => 3 2
            [4] => weapon sword
            [5] => 1 1 1 1
            [6] => 0
            [7] => 17
            [8] => 1
            [9] => Knight 1
            [10] => 24
            [11] => 6973
            [12] => 1743
            [13] => 18
            [14] => (aspeed 700
            [15] => 45 65
            [16] => 29
        )

)
D.h.
$array[0] wirst du nicht brauchen. Aber $array[1] sind alle Keys und $array[2] alle Values. Dann gibt es bestimmt eine Array funktion, die die beiden sachen zusammen packt, wenn dann kann man es so machen:
PHP:
$newArray = array();
$n = min(count($array[0]), count($array[1])); //Eigendlich unnötig, da beide Array gleichgroß sind, aber lieber sicher als dass später da was nicht stimmt
for($i = 0; $i < $n; $i++)
{
  $newArray[ $array[0][$i] ] = $array[1][$i];
}

Leider stimmt was mit deiner txt-datei nicht. ich kann sie nicht laden, deshalb kann ich nicht schauen, ob mein regex überall geht...

MfG
Xean

PS: viel Spaß damit!
 
Zurück