Page 80 of 99

Posted: Sun Jan 24, 2016 9:00 am
by Kley
opk44, InFive,
простите пожалуйста, что вмешиваюсь в разговор.
InFive, скажите, Ваш пример, это реальная ситуация? Или будут новые примеры?..
И пожалуйста, покажите ожидаемый результат сортировки (ведь их несколько).

Posted: Sun Jan 24, 2016 11:03 am
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...

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

Posted: Sun Jan 24, 2016 3:35 pm
by YuS
Kley wrote:...
1. ... SearchReplace.js (KDJ);
...
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... всё обновлено...


Image

Posted: Sun Jan 24, 2016 7:22 pm
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();
}

Posted: Sun Jan 24, 2016 8:24 pm
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?

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

Posted: Mon Feb 01, 2016 9:17 pm
by KDJ
FindReplaceEx.js
Fixed bug: "Find all" boundaries (^, $, \b, \B) with regular expressions.