Page 13 of 29
Posted: Mon Apr 22, 2013 10:27 am
by Fr0sT
это что, киберспорт такой - писать на двух языках одновременно, а не поочередно?
Зачем придираешься, что человек знает, на том и хочет писать.
klopus
поскольку скрипт на JS, функция тоже должна быть на JS. Но это не страшно, ты лучше опиши, что она должна делать.
Posted: Mon Apr 22, 2013 1:15 pm
by klopus
Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
начал с этого и замены не произошло

Posted: Mon Apr 22, 2013 1:17 pm
by klopus
KDJ wrote:klopus
Replace dialog.
Simply, without regular expressions:
What: <Тег>0.354</Тег>
With: <Тег>0.4</Тег>
With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1
This last will replace
<Тег>0.xyz</Тег>
(where x,y,z any digit 0-9)
with
<Тег>0.z</Тег>
not working

Posted: Mon Apr 22, 2013 4:53 pm
by opk44
klopus wrote:Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
начал с этого и замены не произошло

Совет рабочий. Проверяйте. Где-то у Вас косяк. Возможно Вы скопипастили шаблоны поиска/замены, но элементарно забыли заменить слово "Тег" из примера на его истинное значение из рабочего текста.
Posted: Mon Apr 22, 2013 5:00 pm
by opk44
klopus wrote:KDJ wrote:klopus
Replace dialog.
...
With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1
...
not working :(
Если речь об этой части (With regular expressions), то тут действительно есть один тонкий момент или, если хотите, "подводный камень"...
Короче говоря, надо жать "Заменить всё", а не "Заменить".
Posted: Mon Apr 22, 2013 5:07 pm
by KDJ
klopus wrote:KDJ wrote:klopus
Replace dialog.
Simply, without regular expressions:
What: <Тег>0.354</Тег>
With: <Тег>0.4</Тег>
With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1
This last will replace
<Тег>0.xyz</Тег>
(where x,y,z any digit 0-9)
with
<Тег>0.z</Тег>
not working

For me it works properly.
For this regular expression is required AkelPad version 4.8.2.
Or maybe you badly copied the regular expression. Should be no leading or trailing spaces.
Posted: Mon Apr 22, 2013 9:47 pm
by opk44
Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
Если же надо именно округлять числа, то поможет скрипт SearchReplace, там можно ставить собственную JS-функцию в качестве замены.
Исходя из предположения, что речь действительно идет об округлении значений определенного тега до одного знака после запятой, можно предложить вот что (в качестве предварительного наброска):
Запустить скрипт SearchReplace.js
Что: (<Тег>)(\d+\.\d+)(</Тег>)
Чем: var x = Math.round(parseFloat($2)*10)/10; return $1 + x.toString(10) + $3;
галки на "Регулярные выражения" и "Заменять на функцию".
По моему разумению, средняя часть должна брать все неотрицательные числа с дробной частью.
Функция написана по образу и подобию той, что идет в примере к скрипту SearchReplace.js
Posted: Mon Apr 22, 2013 10:03 pm
by klopus
opk44 wrote:Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
Если же надо именно округлять числа, то поможет скрипт SearchReplace, там можно ставить собственную JS-функцию в качестве замены.
Исходя из предположения, что речь действительно идет об округлении значений определенного тега до одного знака после запятой, можно предложить вот что (в качестве предварительного наброска):
Запустить скрипт SearchReplace.js
Что: (<Тег>)(\d+\.\d+)(</Тег>)
Чем: var x = Math.round(parseFloat($2)*10)/10; return $1 + x.toString(10) + $3;
галки на "Регулярные выражения" и "Заменять на функцию".
По моему разумению, средняя часть должна брать все неотрицательные числа с дробной частью.
Функция написана по образу и подобию той, что идет в примере к скрипту SearchReplace.js
на самом деле округление было не целью, но и так получилось хорошо

Спасибо всем за помощь!
Posted: Sat May 04, 2013 9:44 am
by saym101
Не получилось сделать замену с регулярными выражениями -
Делаем replace с включёнными regular expressions. Заменяем %^(*^)/i на $^1 Эта операция заменяет /i в конце строки на символ $ в начала строки.
Code: Select all
1000-километровой=<тысячекилометро<вой> /i
1000-лепестковым=<тысячелепестко<вым> /i
100-кубовой=<100-кубо<вой> /i
10-километровый=<десяти-километровый> /i
110-метровую=<стодесятиметро<вую> /i
должно
Code: Select all
$1000-километровой=<тысячекилометро<вой>
$1000-лепестковым=<тысячелепестко<вым>
$100-кубовой=<100-кубо<вой>
$10-километровый=<десяти-километровый>
$110-метровую=<стодесятиметро<вую>
Posted: Sat May 04, 2013 11:16 am
by KDJ
saym101
What: ^(.+) /i$
With: $\1
Posted: Sat May 04, 2013 11:51 am
by opk44
saym101 wrote:Не получилось сделать замену с регулярными выражениями...
Можно было и без регулярок обойтись, просто "по рабоче-крестьянски".
Что: /i\n
Чем: \n$
(с галочкой на Esc-последовательностях)
Но у такого способа два маленьких недостатка: 1) первая и последняя строки потребуют ручной коррекции; 2) если на концах строк после "/i" есть пробелы, то сначала придется сделать RTRIM (выделить весь текст CTRL+A, затем ALT+BACKSPACE) и только потом выполнять замену.
Posted: Sun May 12, 2013 9:02 am
by bayzhanov
Подскажите как с помощью регулярных выражений в тексте формата:
X-65.062Y-0.041Z63.402
X-64.71Y-0.116Z63.533
X-64.35Y-0.194Z63.635
X-63.617Y-0.351Z63.785
X-63.249Y-0.43Z63.856
Найти:
1.Минимальный/максимальный X/Y/Z?
Заменить:
1.Увеличить значение иксов на пять например X-65.062 > X-60.062 ?
2. И в общем случае есть механизмы в регулярных выражениях или других плагинах работы с уравнениями например как в экселе?
Posted: Sun May 12, 2013 3:37 pm
by KDJ
bayzhanov wrote:Подскажите как с помощью регулярных выражений в тексте формата:
X-65.062Y-0.041Z63.402
X-64.71Y-0.116Z63.533
X-64.35Y-0.194Z63.635
X-63.617Y-0.351Z63.785
X-63.249Y-0.43Z63.856
Найти:
1.Минимальный/максимальный X/Y/Z?
You can use SearchReplace.js script with "Regular expression" and "Replace with function" parameters.
What:
With:
Code: Select all
var n = Number(arguments[2]); var f = arguments.callee; if (arguments[1] == "X") {if (!(f.xL < n)) f.xL = n; if (!(f.xH > n)) f.xH = n;} else if (arguments[1] == "Y") {if (!(f.yL < n)) f.yL = n; if (!(f.yH > n)) f.yH = n;} else if (arguments[1] == "Z") {if (!(f.zL < n)) f.zL = n; if (!(f.zH > n)) f.zH = n;} if (! /(X|Y|Z)(-?\d*\.?\d+)/.test(arguments[arguments.length - 1].substr(arguments[arguments.length - 2] + arguments[0].length))) WScript.Echo("X min=" + f.xL + "\n" + "X max=" + f.xH + "\n" + "Y min=" + f.yL + "\n" + "Y max=" + f.yH + "\n" + "Z min=" + f.zL + "\n" + "Z max=" + f.zH); return arguments[0];
And you should press "Replace all" button.
bayzhanov wrote:Заменить:
1.Увеличить значение иксов на пять например X-65.062 > X-60.062 ?
What: (X)(-?\d*\.?\d+)
With: return arguments[1] + (Number(arguments[2]) + 5).toFixed(3);
Posted: Sun May 12, 2013 7:08 pm
by opk44
bayzhanov wrote:...
2. И в общем случае есть механизмы в регулярных выражениях или других плагинах работы с уравнениями например как в экселе?
Можно попробовать плагин Scripts (поддержка JScript/VBScript). Распарсить текст в массив и с элементами уже играться как нужно.
Простейший пример (JScript):
Code: Select all
// парсим выделенный текст
var pSelText=AkelPad.GetSelText().split(/X|Y|Z|\r/);
// шоу и арифметика
for (i = 0; i < pSelText.length; ++i)
{
WScript.Echo(pSelText[i]);
WScript.Echo(parseFloat(pSelText[i])+5);
}
Автозамена
Posted: Wed May 15, 2013 6:48 pm
by Jumperbest
Всем Здравствуйте. Умоляю помогите нависать скрипт авто замены что бы
<item value=" просто удялялось
"><text> менялось на пробел и "
</text></item> меняось на "
В результати из такого
<item value="7"><text>Луганск</text></item>
превращалось в такое
7 "Луганск"
И все это делалось нажатием(по возможности одной кнопки).
Помогите пожалуйста начинающиму прогиру )