opk44, InFive,
простите пожалуйста, что вмешиваюсь в разговор. InFive, скажите, Ваш пример, это реальная ситуация? Или будут новые примеры?..
И пожалуйста, покажите ожидаемый результат сортировки (ведь их несколько).
Posted: Sun Jan 24, 2016 11:03 am
by InFive
Kley wrote:скажите, Ваш пример, это реальная ситуация? Или будут новые примеры?..
И пожалуйста, покажите ожидаемый результат сортировки (ведь их несколько).
да, данный пример реальный, я только удалил несколько одиноковых слов в каждой строке чтобы пример был короче, а так это реальная ситуация... при чем во множестве документов...
типа чтобы .1.14 не ставилось при сортировке после .1.1 и .1.20 после .1.2...
это кусок документов, в других блоках документов будут другие слова вместо span и emphasis, поэтому длинна будет другая, поэтому при использовании сортировки по колонкам, я так вижу, использовать только ключ 1, в котором указываю минимум в начале и максимум в конце, но вот сортировка по числам проблема - он ставит 1.10 после 1.1, а 1.20 после 1.2, и так далее...
точнее, у меня сортировку по числам скрипт сортировки по колонкам не совершает, а сортировка происходит по алфавиту, но в этом случае 1.14 ставится после 1.1 а не после 1.6...
Posted: Sun Jan 24, 2016 2:03 pm
by Kley
InFive,
надеюсь поймете, что я имею ввиду: нельзя сделать табуретку одним только молотком. Нужно выбрать правильный комплект инструментов, и всё.
Инструкция (описание длинное, но делается все легко и быстро):
1. необходимые "инструменты": AlignColumns.js (мой ), SortInColumns.js (KDJ), SearchReplace.js (KDJ);
2. выделить нужный текст -> AlignColumns.js -> (разделитель - точка, выровнять в колонку - вкл.) -> OK -> закрыть;
3. SortInColumns.js -> (columns: 1 to 40; lines 1 to 18; Key 1: 20 to 40; Ignore case - вкл.; Numerically - вкл.) -> SORT -> закрыть;
4. SearchReplace.js -> (что: +([/.]) (перед плюсом пробел); чем: 1$; рег.выражения - вкл.; в выделении - вкл.) -> Заменить все -> закрыть.
Только пара уточнений:
1. SearchReplace.js - Author: Shengalts Aleksander aka Instructor
4. чем: $1;
И заодно пара вопросов:
А почему именно SerchReplace.js? Вроде стандартная замена тоже с этим справиться может.
И в шаблоне [/.], судя по исходному тексту, ошибка? Наверное так: [\.]?
Posted: Sun Jan 24, 2016 4:05 pm
by Kley
InFive,
слушайте YuS. Он плохому не научит. YuS,
Спасибо. Все ошибки из-за невнимательности и спешки. Оплошал
А почему именно SerchReplace.js? Просто их (поисков/замен) несколько (с диалогом и без), не расписывать же все. Выбрал на удачу.
Posted: Sun Jan 24, 2016 7:07 pm
by InFive
Kley wrote:InFive,
Инструкция
спасибо, инструкция неплохая, усвоил новую возможность через скрипты... только одно но... у меня это не работает... на скриншоте видно, что строки 3 и 12 не передвинулись и по-прежнему 1.1 идёт после 1.2... то есть, у меня не произошло ни единого изменения... для надежности, перед тестом проверил обновления AkelPad... всё обновлено...
var hEditWnd = AkelPad.GetEditWnd();
var aLine;
if ((! hEditWnd) || AkelPad.GetEditReadOnly(0))
WScript.Quit();
GetLines();
if (aLine.length)
{
aLine.sort(SortFunc);
AkelPad.ReplaceSel(aLine.join("\r"), -1 /*RST_SELECT*/);
}
function SortFunc(s1, s2)
{
var sL1 = s1;
var sL2 = s2;
var aMatch;
var nLen;
var i;
if (aMatch = (sL1 + sL2).match(/\d+/g))
{
nLen = 1;
for (i = 0; i < aMatch.length; ++i)
nLen = Math.max(nLen, aMatch[i].length);
sL1 = sL1.replace(/\d+/g, ReplaceFunc);
sL2 = sL2.replace(/\d+/g, ReplaceFunc);
}
if (sL1 < sL2)
return -1;
if (sL1 > sL2)
return 1;
return 0;
function ReplaceFunc(sNum)
{
while (sNum.length < nLen)
sNum = "0" + sNum;
return sNum;
}
}
function GetLines()
{
var nSel1 = AkelPad.GetSelStart();
var nSel2 = AkelPad.GetSelEnd();
if (nSel1 == nSel2)
{
nSel1 = 0;
nSel2 = -1;
}
else
{
nSel1 = AkelPad.SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 18 /*AEGI_WRAPLINEBEGIN*/, nSel1);
nSel2 = AkelPad.SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 19 /*AEGI_WRAPLINEEND*/, nSel2);
}
AkelPad.SetSel(nSel1, nSel2);
aLine = AkelPad.GetSelText().split("\r");
if (aLine.length == 1)
aLine.shift();
}
Super! Everything just works fine, applied in the real world, and works quickly.
question: this script can also be in other cases apply to sort numerically, or purely for me in these examples?
Posted: Sun Jan 24, 2016 8:57 pm
by Kley
InFive
На скрине видно, что строки имеют отступ в 1 пробел. В примере этого не было. В общем начало выделения в Key1: From должно было быть сразу за первой точкой.
А вообще у KDJ действительно отличный скрипт получился.
Posted: Mon Jan 25, 2016 8:08 pm
by KDJ
InFive
I put this script in the script collection, with changed name: SortLinesWithIntegers.js.
Added some parameters.
Posted: Tue Jan 26, 2016 12:00 am
by InFive
KDJ
It's cool! Thank you very much...
Posted: Fri Jan 29, 2016 11:16 am
by coherent
Подскажите, пожалуйста, где можно посмотреть полный перечень преобразований, которые делает скрипт punctuationFixer.js? Мои познания в скриптах не настолько глубокие, чтобы понять это, исходя из комментариев в самом скрипте. Я поиском прошелся, но не нашел. Если все же описание где-то имеется, ткните, пожалуйста...
Posted: Fri Jan 29, 2016 11:27 am
by VladSh
coherent
На рубоарде уже ответил:
VSHY wrote:Посмотрите в комментах внутри скрипта и всё поймёте. Кроме явных описаний, которые есть в скрипте, есть ещё и "тайные" - скрипт, правя расстановку знаков препинания, не трогает смайлы.
Ну и очевидное и знакомое Вам - возможность перевода первого символа предложений в верхний регистр.
Конечно, хотелось бы хоть какого-то описания по ссылке здесь, на форуме, где выложен скрипт.
Posted: Fri Jan 29, 2016 11:48 am
by coherent
VladSh
Я был не прав относительно комментариев. При более внимательном рассмотрении видно, что они имеются практически для всех преобразований (в конце строки). Буду разбираться. Но я надеялся, что, возможно, есть где-то готовый перечень в совсем уж явном виде.