|
|
|
| Помогите с рег выр. Есть файл, в котором
[CHAR 0110]
NAME=Player
......тут дальше много строк разных......
[ITEM 01921]
TYPE=2,0,0
....много строк...
.............................
[CHAR 0111]
NAME=Player2
......много строк......
[ITEM 01921]
TYPE=3,0,0
....много строк.....
|
Нужно вывести все в таком формате
Player = 2 (Player взяли из NAME= , а 2 взяли из TYPE= , который находиться несколькими строчками ниже, но только после строки [ITEM 01921])
Player2 =3(Player взяли из NAME= , а 3 взяли из TYPE= , который находиться несколькими строчками ниже, но только после строки [ITEM 01921]) | |
|
|
|
|
|
|
|
для: xexe
(17.05.2006 в 15:15)
| | Прикрепите к сообщению кусочек файла, так как регулярное выражение зависит от того что находится в блоке ....много строк... | |
|
|
|
|
|
|
|
для: cheops
(18.05.2006 в 12:34)
| |
[CHAR 0110]
NAME=Player
SERIAL=0100012d8
TIMER=0
FLAGS=01000000
HITPOINTS=44
[ITEM 0127]
SERIAL=040010ca8
[ITEM 01921]
SERIAL=0400012d8
TYPE=7,0,0
LAYER=91
[ITEM 0937]
SERIAL=0203102b1
TYPE=2,0,0
[CHAR 0111]
NAME=Player2
SERIAL=0100012a8
TIMER=0
FLAGS=01000000
HITPOINTS=100
[ITEM 0333]
SERIAL=0103402c5
TYPE=1,0,0
FLAGS=01500000
тут может и не встретиться строка [ITEM 01921], тогда пропускаем это имя и смотрим следушее
[CHAR 0110]
NAME=Player3
SERIAL=040009188
TIMER=0
FLAGS=01000000
HITPOINTS=100
[ITEM 0f7b]
SERIAL=04000e916
ATTR=01000
CONT=0400098a7
[ITEM 0f8d]
SERIAL=04000c8b5
AMOUNT=65
ATTR=01000
CONT=0400098a7
[ITEM 0f84]
SERIAL=0400049d4
AMOUNT=35
ATTR=01000
CONT=0400098a7
причем строчек начинающихся на [ITEM почти всегда разное количество
[ITEM 01921]
SERIAL=0400032d8
ID=01f4e
TYPE=91,0,0
ATTR=094
CONT=04829
[ITEM 0e20]
SERIAL=040006293
ID=0e22
TYPE=31
|
т.е. должно получится следущее
Player = 7
Player3 = 91 | |
|
|
|
|
|
|
|
для: xexe
(18.05.2006 в 13:18)
| | Можно попробовать поступить следующим образом
<?php
$contents = file_get_contents("date.txt");
$pattern = "|NAME=([^\s]+)[\s].*TYPE=([\d]+)[^\d]|isU";
preg_match_all($pattern, $contents, $out);
for($i = 0; $i < count($out[1]); $i++)
{
echo $out[1][$i]." = ".$out[2][$i]."<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(18.05.2006 в 23:25)
| | Спасибо. Только получается скрипт выводит все имена
Player = 7
Player2 = 1 <-- вот это лишнее, т.к нету ниже строчки [ITEM 01921]
Player3 = 91
я добавил такую проверку
$pattern = "|NAME=([^\s]+)[\s].*01921\].*TYPE=([\d]+)[^\d]|isU";
|
только она до конца правильно не работает. Например
[CHAR 0110]
NAME=Player3
SERIAL=040009188
TIMER=0
FLAGS=01000000
HITPOINTS=100
[ITEM 0f7b]
SERIAL=04000e916
ATTR=01000
CONT=0400098a7
TYPE=11119,0,0 <-- Получается, что берется первый попавшийся TYPE
[ITEM 0f8d]
SERIAL=04000c8b5
AMOUNT=65
ATTR=01000
CONT=0400098a7
[ITEM 01921]
SERIAL=0400032d8
ID=01f4e
TYPE=91,0,0
ATTR=094
CONT=04829
|
должно выйти Player3=91 , а выходит Player3=11119 | |
|
|
|
|
|
|
|
для: xexe
(19.05.2006 в 10:24)
| | Хм... подумать нужно... | |
|
|
|
|
|
|
|
для: cheops
(19.05.2006 в 23:00)
| | HELP | |
|
|
|