AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

поиск и замена
Goto page Previous  1, 2, 3 ... 16, 17, 18, 19, 20  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
zverevkr



Joined: 13 Mar 2015
Posts: 2

PostPosted: Fri Mar 13, 2015 9:18 pm    Post subject: перемножение во множестве текстовых файлов не трогая текст Reply with quote

Скажите, можно ли решить следующую задачу используя akelpad и скрипты(плагины)?
Есть текстовые файлы(несколько десятков), в них есть по сотне записей с группами, в группах расписаны шансы на выпадение самой группы, а так же внутри каждой из групп есть индивидуальные шансы на каждый итем входящий в эту группу, нужно привести множество текстовых файлов, содержащих такие строки ко второму виду, где индивидуально раписаны шансы каждого итема. И этот шанс получен перемножением индивидуального шанса этого итема на шанс группы в которой этот итем находится. Не трогая остальной текст, содержащийся в файлах. Строки с групповыми шансами можно не удалять(если сделать это после, создав единую группу с шансом 100% на каждый список итемов).
Оригинал

некий текст
<group chance=«aa»>
<текст итема1" chance=«bb» />
</group>
<group chance=«cc»>
<текст итема2 " chance=«dd» />
<текст итема3 " chance=«ee» />
<текст итема4 " chance=«ff» />
<текст итема5 " chance=«gg» />
</group>
<group chance=«hh»>
<текст итема6 " chance=«ii» />
<текст итема7 " chance=«jj» />
</group>
некий текст

Пример

Сделать из записи вида:
group 1 =60%
item 1 = 20%
item 2 = 80%
group 2 = 50%
item 3 = 10%
item 4 = 30%
item 5 = 20%
item 6 = 2%
group 3 = 20%
item 7 = 90%
item 8 = 80%
Такую запись:
item1 = 12%
item2 = 48%
item3 = 5%
item4 = 15%
item5 = 10%
item6 = 1%
item7 = 18%
item8 = 16%

Результат:

некий текст
<group chance=«aa»>
<текст итема1 " chance=«aa*bb» />
</group>
<group chance=«cc»>
<текст итема2 " chance=«cc*dd» />
<текст итема3 " chance=«cc*ee» />
<текст итема4 " chance=«cc*ff» />
<текст итема5 " chance=«cc*gg» />
</group>
<group chance=«hh»>
<текст итема6 " chance=«hh*ii» />
<текст итема7 " chance=«hh*jj» />
</group>
некий текст

А если можно - такой результат

некий текст
<group chance=«100%»>
<текст итема1 " chance=«aa*bb» />
<текст итема2 " chance=«cc*dd» />
<текст итема3 " chance=«cc*ee» />
<текст итема4 " chance=«cc*ff» />
<текст итема5 " chance=«cc*gg» />
<текст итема6 " chance=«hh*ii» />
<текст итема7 " chance=«hh*jj» />
</group>
некий текст

При этом aa*bb должно быть непосредственно результатом перемножения.
Примерный алгоритм, возможно совершенно не верный, просто то, что мне пришло в голову..
0) переменная «групшанс» по умолчанию =1
1)читаю текст, нахожу фразу group chance, считываю всё, что после =" и до второй " в переменную «групшанс»
1.5)умножаю переменную «групшанс» на 0.01(так как надо значение в процентах перевести в значение в долях то есть 100% = 1, 50%=0.5, 0.5%=0.005 и тд)
2)далее умножаю встречающееся мне число, расположенное после " chance=" и до второй кавычки " на переменную «групшанс» и перезаписываю полученный результат вместо исходного числа
3)далее проверяю, нет ли строки group chance, если есть, то возвращаюсь к пункту 1), если нет, то к пункту 2), если же встречаю фразу </group> то записываю в переменную «групшанс» число 1
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 498
Location: Win7SP1x64, APx64

PostPosted: Fri Mar 13, 2015 11:14 pm    Post subject: Reply with quote

zverevkr
можно.
для этого даже акелпад не нужен, можно запускать эти скрипты (.js/.wsh/.bat) и без него.
Back to top
View user's profile Send private message
zverevkr



Joined: 13 Mar 2015
Posts: 2

PostPosted: Mon Mar 16, 2015 9:25 am    Post subject: Reply with quote

Drugmix wrote:
zverevkr
можно.
для этого даже акелпад не нужен, можно запускать эти скрипты (.js/.wsh/.bat) и без него.

а может кто-нибудь помочь составить такой скрипт?
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 498
Location: Win7SP1x64, APx64

PostPosted: Mon Mar 16, 2015 5:28 pm    Post subject: Reply with quote

zverevkr
может, но для этого лучше спросить на соответствующих данной тематике форумах.
Back to top
View user's profile Send private message
Dimon485



Joined: 09 Apr 2015
Posts: 6

PostPosted: Wed Apr 22, 2015 1:52 pm    Post subject: Reply with quote

Подскажите пожалуйста, как заменить в тексте скобки в виде слэша на квадратные. То есть вот так:
/текст/ -> [текст]
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1577
Location: Poland

PostPosted: Wed Apr 22, 2015 2:05 pm    Post subject: Reply with quote

Dimon485
Replace dialog with "Regular expressions":
What: /([^/]+)/
With: [\1]
Back to top
View user's profile Send private message
Dimon485



Joined: 09 Apr 2015
Posts: 6

PostPosted: Wed Apr 22, 2015 6:58 pm    Post subject: Reply with quote

KDJ, thanx a lot! It`s just a miracle! =)
Back to top
View user's profile Send private message
yozhic



Joined: 20 Jun 2011
Posts: 134
Location: Электросталь

PostPosted: Mon May 18, 2015 10:08 am    Post subject: Reply with quote

Помогите, пожалуйста, задачку решить. Подозреваю, что это возможно через «Заменить на функцию». Нужно найти в тексте диапазон <a>...</a>, внутри него найти диапазон <b>...</b> и внутри второго диапазона произвести замены.
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1577
Location: Poland

PostPosted: Mon May 18, 2015 11:09 am    Post subject: Reply with quote

yozhic
In standard "Replace" dialog (with Regular expressions), try this:
What: (<a>.*?<b>).*?(</b>.*?</a>)
With: \1NewText\2
Back to top
View user's profile Send private message
yozhic



Joined: 20 Jun 2011
Posts: 134
Location: Электросталь

PostPosted: Mon May 18, 2015 1:34 pm    Post subject: Reply with quote

KDJ
Понял, надо подробнее изложить. Есть текст такого вида
Code:

<c>...</c>
... <a>
 <c>...</c>
 <c>...</c>
  <b> ...
   <c>...</c>
   <c>...</c>
  </b>
 <c>...</c>
 <c>...</c>
  <b> ...
   <c>...</c>
   <c>...</c>
  </b>
 <c>...</c>
 <c>...</c>
</a>
<c>...</c>
. Нужно заменить только те <c>, которые находятся внутри диапазонов <b> и внутри <a>. Я пробовал так:

What: (<a>.*?<b>)(.*?)(</b>.*?</a>)
With: return arguments[1] + arguments[2].replace(/<c>/g, "<d>") + arguments[3];

Но так замены происходят только в первом диапазоне <b>, при этом второй не затрагивается. А нужно, чтобы заменяло во всех диапазонах <b> внутри <a>, причём таких диапазонов <b> внутри <a> может быть несколько (больше двух). Возможно ли это решить одной функцией? Если нет, то буду тогда изменять теги <b> при каждом проходе и так, в несколько проходов, обработаю весь текст. Просто хотелось узнать, существует ли более изящное решение Smile
Back to top
View user's profile Send private message
YuS



Joined: 15 Sep 2013
Posts: 189

PostPosted: Mon May 18, 2015 4:49 pm    Post subject: Reply with quote

yozhic wrote:
Просто хотелось узнать, существует ли более изящное решение Smile

Изящным решение не назову, т.к. в один проход такую замену осуществить непросто, но как вариант:
Code:
Что: <a>.*?<b>.*?\K(<c>[^<]*</c>)(?=.*?</b>.*?</a>)
Чем: <d>NewText</d>

- добавляем в пакет (FindReplaceEx.js) несколько раз этот шаблон (чем больше, тем меньше вероятность пропуска нужного сочетания), затем запускаем и для уверенности проверяем дублированием запуска этого пакета.

Добавлено:
У этого шаблона существенный недостаток:
текст
Code:
  <b> ...
   <c>...</c>
   <c>...</c>
  </b>
 <c>...</c>
 <c>...</c>
  <b> ...
   <c>...</c>
   <c>...</c>
  </b>

- здесь будут захвачены абсолютно все "<c>...</c>", т.к. в итоге они находятся между первым тегом "<b>" и последним "</b>". Способа обойти это не нашел.
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1577
Location: Poland

PostPosted: Mon May 18, 2015 6:30 pm    Post subject: Reply with quote

yozhic
Script SearchReplace.js:
+Regular expressions
+Replace with function
What: (<a>)([\s\S]*?)(</a>)
With: return $1 + ($2).replace(/<b>[\s\S]*?<\/b>/g, "<b>" + "NewText" + "<\/b>") + $3;
Back to top
View user's profile Send private message
ezjikfrom



Joined: 20 May 2015
Posts: 6

PostPosted: Wed May 20, 2015 9:53 am    Post subject: Вопрос по функционалу: копирование и вставка в нужные поля Reply with quote

Добрый день, подскажите, пожалуйста:
Нужно в xml скопировать в каждом товаре значение из поля url этого товара в значение поля discription этого же товара. Товаров много, т.е. система должна искать поле урл, копировать инфу оттуда (в идеале только то, что находится между <url> и </url>) и эту инфу вставлять после <discription>.
Подскажите, пожалуйста, как это сделать в AkelPade
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Wed May 20, 2015 11:49 am    Post subject: Reply with quote

Заменить <url> и </url> на <discription> и </discription> ?
Back to top
View user's profile Send private message
ezjikfrom



Joined: 20 May 2015
Posts: 6

PostPosted: Wed May 20, 2015 12:11 pm    Post subject: Reply with quote

Нет, не так все просто, к сожалению)
Пункт url мне надо оставить на своем месте, а просто значение оттуда (адрес страницы) скопировать в description, добавить уже к имеющейся информации в description. А такая замена уберет существующий <description> и <url>, что недопустимо для меня.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page Previous  1, 2, 3 ... 16, 17, 18, 19, 20  Next
Page 17 of 20

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group