Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизПроблема Найти похожие ветки
← →
Pacific (2007-11-14 18:03) [0]Здравствуйте! Есть строка:
{{{[adena];1140;1570;70}};100};{{{[buckler];1;1;4.533};{[wooden_helmet];1;1;3 .166};{[wooden_arrow];10;30;157.499};{[rp_leather_helmet];1;1;30.882};{[suede];1 ;1;21};{[charcoal];1;1;31.5}};100}}
Из этой строки мне надо по отдельности вытащить:
{[adena];1140;1570;70}
----
{[buckler];1;1;4.533};{[wooden_helmet];1;1;3.166};{[wooden_arrow];10;30;157.4 99};{[rp_leather_helmet];1;1;30.882};{[suede];1;1;21};{[charcoal];1;1;31.5}
Как я пытаюсь это делать:
while int[1]<>0 do
begin
int[1]:=PosEx("{{{", drop, int[1]+1);
int[2]:=PosEx("}}", drop, int[2]+1);
result:=copy(drop, int[1], int[2]-int[1]);
Ничего не получаеться, подскажите что-нибудь)
← →
Reindeer Moss Eater © (2007-11-14 18:04) [1]все у тебя получается
← →
Pacific (2007-11-14 18:06) [2]Pезультат-
Pезультат-{{{[adena];1140;1570;70}
Все дальше не идет :((
← →
Reindeer Moss Eater © (2007-11-14 18:06) [3]А дальше и не надо.
← →
Pacific (2007-11-14 18:08) [4]Программа должна была еще скопировать:
{{{[buckler];1;1;4.533};{[wooden_helmet];1;1;3.166};{[wooden_arrow];10;30;157.4 99};{[rp_leather_helmet];1;1;30.882};{[suede];1;1;21};{[charcoal];1;1;31.5}
но почемуто это не сделала
← →
Reindeer Moss Eater © (2007-11-14 18:10) [5]наверное в программе ошибка
← →
Reindeer Moss Eater © (2007-11-14 18:12) [6]А может не затирать на каждой итерации цикла предыдущий резалт?
← →
Vice____ (2007-11-14 18:17) [7]
> Reindeer Moss Eater © (14.11.07 18:12) [6]
>
> А может не затирать на каждой итерации цикла предыдущий
> резалт?
плюс еще
{{{[adena];1140;1570;70}};100};
{{{[buckler];1;1;4.533};
{[wooden_helmet];1;1;3 .166};
← →
Reindeer Moss Eater © (2007-11-14 18:26) [8]Регулярные выражения.
← →
Pacific (2007-11-14 18:57) [9]Вот код:
int[6]:=1;
int[5]:=0;
while int[6]<>0 do
begin
Inc(int[5]);
int[1]:=PosEx("{{{", drop, int[3]);
int[2]:=PosEx("}}", drop, int[4]);
int[3]:=int[3]+int[1]+1;
int[4]:=int[4]+int[2]+1;
int[6]:=int[1];
result:=copy(drop, int[1]+2, 1555);
form1.Memo1.Lines.Add(inttostr(int[5])+"--"+result);
А вот так конвертит:
1--{[adena];765;1528;70}};100};{{{[proof_of_blood];1;2;40.4971};{[stem];1;10;36.113 1};{[suede];1;10;12.0378};{[braided_hemp];1;10;7.2227};{[high_grade_suede];1;10; 1.5049};{[compound_braid];1;10;1.2038};{[tunic_of_shrnoen];1;1;0.0024};{[hose_of _shrnoen];1;1;0.0038};{[avadon_robe];1;1;0.0016};{[tunic_of_shrnoen_fabric];1;3; 0.4256};{[hose_of_shrnoen_fabric];1;3;0.6463};{[avadon_robe_fabric];1;3;0.327};{ [rp_demon_s_sword];1;2;0.0138}};100}}
2--{[proof_of_blood];1;2;40.4971};{[stem];1;10;36.1131};{[suede];1;10;12.0378};{[br aided_hemp];1;10;7.2227};{[high_grade_suede];1;10;1.5049};{[compound_braid];1;10 ;1.2038};{[tunic_of_shrnoen];1;1;0.0024};{[hose_of_shrnoen];1;1;0.0038};{[avadon _robe];1;1;0.0016};{[tunic_of_shrnoen_fabric];1;3;0.4256};{[hose_of_shrnoen_fabr ic];1;3;0.6463};{[avadon_robe_fabric];1;3;0.327};{[rp_demon_s_sword];1;2;0.0138} };100}}
3--{{[adena];765;1528;70}};100};{{{[proof_of_blood];1;2;40.4971};{[stem];1;10;36.11 31};{[suede];1;10;12.0378};{[braided_hemp];1;10;7.2227};{[high_grade_suede];1;10 ;1.5049};{[compound_braid];1;10;1.2038};{[tunic_of_shrnoen];1;1;0.0024};{[hose_o f_shrnoen];1;1;0.0038};{[avadon_robe];1;1;0.0016};{[tunic_of_shrnoen_fabric];1;3 ;0.4256};{[hose_of_shrnoen_fabric];1;3;0.6463};{[avadon_robe_fabric];1;3;0.327}; {[rp_demon_s_sword];1;2;0.0138}};100}}
1--{{[adena];1730;3470;70}};100}}
1--{{[adena];1480;2930;70}};100}}
1--{{[adena];1480;2930;70}};100}}
1--{{[adena];2280;4550;70}};100}}
1--{{[adena];1940;3870;70}};100}}
← →
Vice____ (2007-11-14 19:21) [10]может не самый оптимальный вариант, но по другому меня никто не заставил бы сделать)
temp:="{{{[adena];1140;1570;70}};100};{{{[buckler];1;1;4.533};{[wooden_hel met];1;1;3 .166};"+
"{[wooden_arrow];10;30;157.499};{[rp_leather_helmet];1;1;30.882};{[suede];1 ;1;21};{[charcoal];1;1;31.5}};100}}";
bufTemp:="";
for i:=1 to Length(temp)do begin
if bufTemp<>"" then bufTemp:=bufTemp+temp[i];
if temp[i]="{" then bufTemp:="{";
if (temp[i]="}")AND(bufTemp<>"")then begin
Memo1.Lines.Add(bufTemp);
bufTemp:=""; end;
end;
← →
Pacific (2007-11-14 20:50) [11]Уважаемый Vice___ Ваш кусок кода делает так:
{[sealed_draconic_leather_helmet];1;1;33.3333}
{[sealed_major_arcana_robe];1;1;51.4706}
{[sealed_major_arcana_gloves];1;1;48.5294}
{[sealed_major_arcana_boots];1;1;50}
{[sealed_major_arcana_hood];1;1;50}
{[sealed_sanddragon_s_earing];1;2;35}
{[sealed_ring_of_aurakyria];1;2;35}
{[sealed_dragon_necklace];1;2;30}
{[draconic_bow];1;1;22.0588}
{[high_grade_life_stone_level_701];2;8;18.3823}
{[high_grade_life_stone_level_761];3;8;59.5589}
Видите ли мне нужно чтобы из группу вытаскивало: т.е.
Вот кусок:
{{{[adena];1140;1570;70}};100};{{{[buckler];1;1;4.533};{[wooden_helmet];1;1;3 .166};{[wooden_arrow];10;30;157.499};{[rp_leather_helmet];1;1;30.882};{[suede];1 ;1;21};{[charcoal];1;1;31.5}};100}}
Вытащить надо:
{[adena];1140;1570;70}};100};{{{[buckler];1;1;4.533};{[wooden_helmet];1;1;3 .166};{[wooden_arrow];10;30;157.499};{[rp_leather_helmet];1;1;30.882};{[suede];1 ;1;21};{[charcoal];1;1;31.5}
← →
Vice____ (2007-11-14 21:12) [12]
> Pacific (14.11.07 20:50) [11]
>
> Уважаемый Vice___ Ваш кусок кода делает так:
а ето что?
> Pacific (14.11.07 18:03) [0]
>
> Из этой строки мне надо по отдельности вытащить:
> {[adena];1140;1570;70}
> ----
> {[buckler];1;1;4.533};{[wooden_helmet];1;1;3.166};{[wooden_arrow];10;30;157.4 99}; {[rp_leather_helmet];1;1;30.882};{[suede];1;1;21}
;{[charcoal];1;1;31.5}
← →
Pacific (2007-11-14 21:17) [13]Понимаете, у меня как бы разбиты на группы(их много, они разные) и таких строк около 150тысяч...
Группа начинаеться со знака {{{ и заканичивается }}
Вот как я попытался это сделать, но не так удачно(незнаю почему, но у меня он пропускает несколько групп в самом низу пример как он генерит):int[6]:=1;
int[5]:=0;
int[3]:=0;
int[4]:=0;
while int[6]<>0 do
begin
Inc(int[5]);
int[1]:=PosEx("{{{", drop, int[3]);
int[2]:=PosEx("}}", drop, int[4]);
int[3]:=int[3]+int[1]+1;
int[4]:=int[4]+int[2]+1;
int[6]:=int[1];
result:=copy(drop, int[1]+2, int[2]-int[1]);
If (copy(result, 1,2)<>"{{") and (result<>"") then form1.Memo1.Lines.Add(result);
end;
Обратите внимание на 4
1.{[adena];14000000;18000000;100}}
2.{[adena];14000000;18000000;100}}
3.{[adena];14000000;18000000;100}}
4.{[adena];14000000;18000000;100}};100};{{{[adena];14000000;18000000;100}}
5.{[sword_of_miracle];1;2;26.3158};{[elysian];1;2;26.3158};6{[dasparion_s_staff] ;1;2;26.3158};{[worldtree_s_branch];1;2;21.0526}}
{[scrl_of_ench_wp_a];1;38;100}};100};7{{{[blessed_scroll_of_escape];1;38;100}};1 00};{{{[dark_legion_s_edge];1;2;50};{[meteor_shower];1;2;50}};100};{{{[blessed_s croll_of_resurrection];1;78;100}};100};{{{[sealed_dark_crystal_breastplate];1;3; 58.8235};{[sealed_dark_crystal_gaiters];1;3;41.1765}}
и т.д.
← →
Reindeer Moss Eater © (2007-11-14 21:36) [14]регулярные выражения еще раз
← →
Vice____ (2007-11-14 22:05) [15]
> Группа начинаеться со знака {{{ и заканичивается }}
после расшифровки строки решил предположить)temp:="{{{[blessed_scroll_of_escape];1;38;100}};1 00};"+
"{{{[dark_legion_s_edge];1;2;50};{[meteor_shower];1;2;50}};100};"+
"{{{[blessed_s croll_of_resurrection];1;78;100}};100};"+
"{{{[sealed_dark_crystal_breastplate];1;3; 58.8235};{[sealed_dark_crystal_gaiters];1;3;41.1765}}";
bufTemp:="";
for i:=1 to Length(temp)do begin
if bufTemp<>"" then bufTemp:=bufTemp+temp[i];
if bufTemp="" then
if (temp[i]="{")AND(temp[i+1]="{")AND(temp[i+1]="{") then bufTemp:="{";
if bufTemp<>"" then
if (temp[i]="}")AND(temp[i+1]="}")then begin
Memo1.Lines.Add(bufTemp+"}");
bufTemp:=""; end;
end;
← →
Pacific (2007-11-14 22:19) [16]Огромное СПАСИБО Vice____
← →
Vice____ (2007-11-14 22:58) [17]
> Pacific (14.11.07 22:19) [16]
>
> Огромное СПАСИБО Vice____if (temp[i]="{")AND(temp[i+1]="{")AND(temp[i+1]="{") then bufTemp:="{";
замени на i+2
← →
Dimaxx © (2007-11-15 10:14) [18]2 Pacific: Я делал проще - в npcdata фиксированный формат. Убирал все фигурные скобки и анализировал строку. Вытаскивал 4 параметра (итем, мин. кол-во, макс. кол-во, шанс). Потом анализировал следующее за ними значение. Если первый символ "[", значит пошел новый итем. Если там было число, то это шанс группы и она закончилась. И повторял снова до конца строки. Вот и все.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c