Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Проблема   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
15-1194950345
novill
2007-11-13 13:39
2007.12.09
Подскажите бесплатную(шароварную) программу типа Service Desk


2-1195010238
Lebedev
2007-11-14 06:17
2007.12.09
Проблема с MediaPlayer.


3-1186562935
zmalqop
2007-08-08 12:48
2007.12.09
Связь 2-х таблиц по нескольким полям.


2-1195234812
Иринка
2007-11-16 20:40
2007.12.09
Цикл не работает ... ?


15-1194954884
Palladin
2007-11-13 14:54
2007.12.09
IDE Help Windows SDK