поиск и замена
- Author
- Message
-
Offline
- Posts: 2
- Joined: Fri Mar 13, 2015 8:49 pm
перемножение во множестве текстовых файлов не трогая текст
Скажите, можно ли решить следующую задачу используя akelpad и скрипты(плагины)?
Есть текстовые файлы(несколько десятков), в них есть по сотне записей с группами, в группах расписаны шансы на выпадение самой группы, а так же внутри каждой из групп есть индивидуальные шансы на каждый итем входящий в эту группу, нужно привести множество текстовых файлов, содержащих такие строки ко второму виду, где индивидуально раписаны шансы каждого итема. И этот шанс получен перемножением индивидуального шанса этого итема на шанс группы в которой этот итем находится. Не трогая остальной текст, содержащийся в файлах. Строки с групповыми шансами можно не удалять(если сделать это после, создав единую группу с шансом 100% на каждый список итемов).
При этом 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[more=""]
Есть текстовые файлы(несколько десятков), в них есть по сотне записей с группами, в группах расписаны шансы на выпадение самой группы, а так же внутри каждой из групп есть индивидуальные шансы на каждый итем входящий в эту группу, нужно привести множество текстовых файлов, содержащих такие строки ко второму виду, где индивидуально раписаны шансы каждого итема. И этот шанс получен перемножением индивидуального шанса этого итема на шанс группы в которой этот итем находится. Не трогая остальной текст, содержащийся в файлах. Строки с групповыми шансами можно не удалять(если сделать это после, создав единую группу с шансом 100% на каждый список итемов).
При этом 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[more=""]
-
Offline
- Posts: 269
- Joined: Mon Jun 20, 2011 8:33 am
- Location: Электросталь
-
Offline
- Posts: 269
- Joined: Mon Jun 20, 2011 8:33 am
- Location: Электросталь
KDJ
Понял, надо подробнее изложить. Есть текст . Нужно заменить только те <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> при каждом проходе и так, в несколько проходов, обработаю весь текст. Просто хотелось узнать, существует ли более изящное решение
Понял, надо подробнее изложить. Есть текст . Нужно заменить только те <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> при каждом проходе и так, в несколько проходов, обработаю весь текст. Просто хотелось узнать, существует ли более изящное решение
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Изящным решение не назову, т.к. в один проход такую замену осуществить непросто, но как вариант:yozhic wrote:Просто хотелось узнать, существует ли более изящное решение
Code: Select all
Что: <a>.*?<b>.*?\K(<c>[^<]*</c>)(?=.*?</b>.*?</a>)
Чем: <d>NewText</d>
Добавлено:
У этого шаблона существенный недостаток:
- здесь будут захвачены абсолютно все "<c>...</c>", т.к. в итоге они находятся между первым тегом "<b>" и последним "</b>". Способа обойти это не нашел.
-
Offline
- Posts: 6
- Joined: Wed May 20, 2015 9:36 am
Вопрос по функционалу: копирование и вставка в нужные поля
Добрый день, подскажите, пожалуйста:
Нужно в xml скопировать в каждом товаре значение из поля url этого товара в значение поля discription этого же товара. Товаров много, т.е. система должна искать поле урл, копировать инфу оттуда (в идеале только то, что находится между <url> и </url>) и эту инфу вставлять после <discription>.
Подскажите, пожалуйста, как это сделать в AkelPade
Нужно в xml скопировать в каждом товаре значение из поля url этого товара в значение поля discription этого же товара. Товаров много, т.е. система должна искать поле урл, копировать инфу оттуда (в идеале только то, что находится между <url> и </url>) и эту инфу вставлять после <discription>.
Подскажите, пожалуйста, как это сделать в AkelPade
-
Offline
- Posts: 6
- Joined: Wed May 20, 2015 9:36 am