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:

Code: Select all

(X|Y|Z)(-?\d*\.?\d+)
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 "Луганск"

И все это делалось нажатием(по возможности одной кнопки).

Помогите пожалуйста начинающиму прогиру )