Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Парсер xml'ки
#11
Itemname-ru, Itemname-e
Ответ
#12
минуточкуWink
consulo.io - Consulo - multi-language IDE
Ответ
#13
в аттаче) ток там .rar Архив, если не откроется, переименуйте


Файлы вложений
.zip   items.zip (Размер: 802.25 KB / Загрузок: 15)
consulo.io - Consulo - multi-language IDE
Ответ
#14
БлагодарствуюSmile

Добавлено через 1 час 17 минут
PHP код:
<?php
set_time_limit
(900);
$xml = simplexml_load_file('1c.xml');
$xml2 = simplexml_load_file('ItemName-e.xml');

foreach(
$xml->npc as $npcElement)
{
$npcId = (string)$npcElement["id"];
foreach(
$npcElement->rewardlist as $rewardListElement)
{
foreach(
$rewardListElement->group as $groupElement)
{
$gChance = (string)$groupElement["chance"];
foreach(
$groupElement->reward as $rewardElement)
{
$rewardID = (string)$rewardElement["item_id"];
foreach(
$xml2->data as $data)
{
foreach(
$data->item as $itemm)
{
foreach(
$data->name as $namee)
{
if (
$itemm["id"]==$rewardID)
$item=$namee ["value"];
}
}
}
$rewardMIN = (string)$rewardElement["min"];
$rewardMAX = (string)$rewardElement["max"];
$rewardCHANCE = (string)$rewardElement["chance"];
$endCHANCE=0.9999;
$endCHANCE= $gChance/100*$rewardCHANCE;
printf("%d&nbsp&nbsp&nbsp&nbsp&nbsp%s&nbsp&nbsp&nbsp&nbsp&nbsp%d-%d&nbsp&nbsp&nbsp&nbsp&nbsp[%6.4f xx]</br>",$npcId, $item, $rewardMIN, $rewardMAX,$endCHANCE);
}
}
}
}
?>
307 строк выдает за 240 сек. это Т_Т
Ответ
#15
не стоит каждый раз бегать по контейнеру с именами чтобы идентифицировать объект, достаточно сложить все при загрузке в массив (как я говорил ранее) и дергать данные из него.

P.S. не забываем unset'ы после циклов Wink
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Ответ
#16
эхх поколение пехепистов Wink
[src=perl]

#!/usr/bin/perl
use strict;

my($npcId, $gchance);
open(FH,"<npc.xml") or die "$!\n";
while(<FH>)
{
my $str = $_;
if($str =~/npc id="(\d+)"/)
{
$npcId = $1;
}
elsif($str =~/group chance="(.+?)"/)
{
$gchance = $1;
}
elsif($str =~/\<reward\s+item_id="(\d+)" min="(\d+)" max="(\d+)" chance="(.+?)".+?\<\!--(.+?)--\>/)
{
print "$npcId\t$5 $2-$3 [$gchance * 100 / $4]\n";
}
}
close(FH);
[/src]

И работать будет явно побыстрее...
Ответ
#17
rage Написал:эхх поколение пехепистов Wink

у меня ещё в PATH кроме php python стоит, так что временами скрипты мелкие и на нем выполняю =)
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Ответ
#18
rage Написал:эхх поколение пехепистов Wink
[src=perl]
[/src]
И работать будет явно побыстрее...
С пхп хоть немного сталкивался, да и он ближе к си, который я учил не много...
Ответ
#19
rage Написал:эхх поколение пехепистов Wink
[src=perl]

#!/usr/bin/perl
use strict;

my($npcId, $gchance);
open(FH,"<npc.xml") or die "$!\n";
while(<FH>)
{
my $str = $_;
if($str =~/npc id="(\d+)"/)
{
$npcId = $1;
}
elsif($str =~/group chance="(.+?)"/)
{
$gchance = $1;
}
elsif($str =~/\<reward\s+item_id="(\d+)" min="(\d+)" max="(\d+)" chance="(.+?)".+?\<\!--(.+?)--\>/)
{
print "$npcId\t$5 $2-$3 [$gchance * 100 / $4]\n";
}
}
close(FH);
[/src]

И работать будет явно побыстрее...

[src=php]
$data = explode("\n", file_get_contents('npc.xml'));
foreach ($data as $row)
{
if (preg_match('/npc id\="(\d+)"/', $row, $match))
$npcId = (int)$match[1];
else if (preg_match('/group chance="(.+?)"/', $row, $match))
$groupChance = $match[1];
else if (preg_match('/\<reward\s+item_id="(\d+)" min="(\d+)" max="(\d+)" chance="(.+?)".+?\<\!--(.+?)--\>/', $row, $match))
echo $npcId . "\t" . $match[1] . "\t" . $match[2] . '-' . $match[3] . "\t" . $match[4] . "\t" . $match[5] . "\n";
}
[/src]

Работать будет никак не медленнее Perl'а. Это не поколение пехепистов, а тех, кто не умеет быстро решать поставленные задачи Smile
// aka Deft
Ответ
#20
У каждого языка есть своя область применения где этот язык наиболее удобен. Perl как раз для подобных задач и был создан, по этому и решение на перле короче и быстрее, чем на пхп.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)