Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1194608090
Piter
2007-11-09 14:34
2007.12.09
Пятница? Вася Пупкин?


2-1195284173
datorn
2007-11-17 10:22
2007.12.09
wm_gettext


15-1194351921
oldman
2007-11-06 15:25
2007.12.09
Поздравьте меня. Ну, что вам, жалко что-ли?


2-1195119506
авыф
2007-11-15 12:38
2007.12.09
Как в рантайме у DataSource поменять DataSet


5-1163762981
Vitebsky
2006-11-17 14:29
2007.12.09
TRichEdit - просмотр стилей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский