Scripts discussion (3)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

opk44, InFive,
простите пожалуйста, что вмешиваюсь в разговор.
InFive, скажите, Ваш пример, это реальная ситуация? Или будут новые примеры?..
И пожалуйста, покажите ожидаемый результат сортировки (ведь их несколько).

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

Kley wrote:скажите, Ваш пример, это реальная ситуация? Или будут новые примеры?..
И пожалуйста, покажите ожидаемый результат сортировки (ведь их несколько).
да, данный пример реальный, я только удалил несколько одиноковых слов в каждой строке чтобы пример был короче, а так это реальная ситуация... при чем во множестве документов...



<annotate=span.1.1">
<annotate=span.1.2">
<annotate=span.1.1-span.1.5">
<annotate=span.1.3-span.1.5">
<annotate=span.1.6-span.1.8">
<annotate=span.1.14">
<annotate=span.1.20-span.1.26">
<annotate=span.1.20">
<annotate=span.1.26-span.1.31">
<annotate=emphasis.1.1">
<annotate=emphasis.1.2">
<annotate=emphasis.1.1-emphasis.1.5">
<annotate=emphasis.1.3-emphasis.1.5">
<annotate=emphasis.1.6-emphasis.1.8">
<annotate=emphasis.1.14">
<annotate=emphasis.1.20-emphasis.1.26">
<annotate=emphasis.1.26-emphasis.1.31">
<annotate=emphasis.1.20">




<annotate=span.1.1">
<annotate=span.1.1-span.1.5">
<annotate=span.1.2">
<annotate=span.1.3-span.1.5">
<annotate=span.1.6-span.1.8">
<annotate=span.1.14">
<annotate=span.1.20-span.1.26">
<annotate=span.1.20">
<annotate=span.1.26-span.1.31">
<annotate=emphasis.1.1">
<annotate=emphasis.1.1-emphasis.1.5">
<annotate=emphasis.1.2">
<annotate=emphasis.1.3-emphasis.1.5">
<annotate=emphasis.1.6-emphasis.1.8">
<annotate=emphasis.1.14">
<annotate=emphasis.1.20-emphasis.1.26">
<annotate=emphasis.1.26-emphasis.1.31">
<annotate=emphasis.1.20"">


типа чтобы .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...

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post 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$; рег.выражения - вкл.; в выделении - вкл.) -> Заменить все -> закрыть.

YuS
Offline
Posts: 513
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Kley wrote:...
1. ... SearchReplace.js (KDJ);
...
4. SearchReplace.js -> (что: +([/.]) (перед плюсом пробел); чем: 1$; рег.выражения - вкл.; в выделении - вкл.) -> Заменить все -> закрыть.
Только пара уточнений:
1. SearchReplace.js - Author: Shengalts Aleksander aka Instructor
4. чем: $1;

И заодно пара вопросов:
А почему именно SerchReplace.js? Вроде стандартная замена тоже с этим справиться может.
И в шаблоне [/.], судя по исходному тексту, ошибка? Наверное так: [\.]?

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

InFive,
слушайте YuS. Он плохому не научит.
YuS,
Спасибо. Все ошибки из-за невнимательности и спешки. Оплошал :)
А почему именно SerchReplace.js? Просто их (поисков/замен) несколько (с диалогом и без), не расписывать же все. Выбрал на удачу.

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

Kley wrote:InFive,
Инструкция
спасибо, инструкция неплохая, усвоил новую возможность через скрипты... только одно но... у меня это не работает... на скриншоте видно, что строки 3 и 12 не передвинулись и по-прежнему 1.1 идёт после 1.2... то есть, у меня не произошло ни единого изменения... для надежности, перед тестом проверил обновления AkelPad... всё обновлено...


Image

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

InFive
Try this script:

Code: Select all

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();
}

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

KDJ wrote:InFive
Try this script:

Code: Select all

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?

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

InFive
На скрине видно, что строки имеют отступ в 1 пробел. В примере этого не было. В общем начало выделения в Key1: From должно было быть сразу за первой точкой.
А вообще у KDJ действительно отличный скрипт получился.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

InFive
I put this script in the script collection, with changed name: SortLinesWithIntegers.js.
Added some parameters.

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

KDJ
It's cool! Thank you very much...

Offline
Posts: 9
Joined: Fri Jan 29, 2016 11:04 am

Post by coherent »

Подскажите, пожалуйста, где можно посмотреть полный перечень преобразований, которые делает скрипт punctuationFixer.js? Мои познания в скриптах не настолько глубокие, чтобы понять это, исходя из комментариев в самом скрипте. Я поиском прошелся, но не нашел. Если все же описание где-то имеется, ткните, пожалуйста...

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

coherent
На рубоарде уже ответил:
VSHY wrote:Посмотрите в комментах внутри скрипта и всё поймёте. Кроме явных описаний, которые есть в скрипте, есть ещё и "тайные" :) - скрипт, правя расстановку знаков препинания, не трогает смайлы.
Ну и очевидное и знакомое Вам - возможность перевода первого символа предложений в верхний регистр.

Конечно, хотелось бы хоть какого-то описания по ссылке здесь, на форуме, где выложен скрипт.

Offline
Posts: 9
Joined: Fri Jan 29, 2016 11:04 am

Post by coherent »

VladSh
Я был не прав относительно комментариев. При более внимательном рассмотрении видно, что они имеются практически для всех преобразований (в конце строки). Буду разбираться. Но я надеялся, что, возможно, есть где-то готовый перечень в совсем уж явном виде.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

FindReplaceEx.js
Fixed bug: "Find all" boundaries (^, $, \b, \B) with regular expressions.
Locked