Наконец-то дошли руки попробовать... Отлично! Правда я имел ввиду именно опцию... И жаль что не сохраняется изначальная сортировка...
Но все равно спасибо!
Изменено: увеличение скорости выполнения всех Line* функций и в особенности функций LineGetUnique, LineGetDuplicates, LineRemoveDuplicates, у которых изменен механизм обработки. Изменено: LineGetDuplicates не меняет порядок строк.
Changed: increase execution speed of Line* functions, and in particular LineGetUnique, LineGetDuplicates, LineRemoveDuplicates functions, in which changed the mechanism of processing. Changed: LineGetDuplicates does not change the lines order.
Instructor, отлично работает, только что проверил метод Call("Format::LineSortStrAsc") на документе в 1.327.560 строк - время работы 15-18 секунд, когда раньше можно было и не дождаться!!!
Call("Format::LineRemoveDuplicates") - 13 сек - здорово!!!
По функции сортировки строк по возрастанию.
Баг всё равно присутствует, только с выключенным SmartSel::NoSelEOL он выглядит иначе - перебрасывает курсор на строку, после которой было выделение.
Например выделил 3 строки, курсор стоит в конце 3-й строки, после отработки функции он стоит в начале 4-й.
У нас по этому поводу уже было длительное обсуждение "по поводу захватов переводов всех выделенных строк", и это может быть 256 раз правильно, но но с точки зрения пользователя это баг, - если пользователь выделил 3 строки и это видно визуально, то после отработки различных функций оно так и должно оставаться.
Tcheluskin wrote:Проблемы:
1. Format::LineFixWrap не удаляет лишний пробел перед переносом строки.
Это не проблема. Это нормально. Ф-ция делает ровно то, что должна - "Вставка разрывов строк в местах переноса."
Для удаления концевых пробелов есть соответствующая встроенная (безо всяких плагинов) функция (Alt+Backspace = "убрать Tab'ы и пробелы в конце строк"). Для вызова её в скрипте используйте Command(4174) сразу после вызова LineFixWrap.
Уважаемые!
Не подскажете, что надо сделать, чтобы после применения Format::LineGetDuplicates номера оставшихся строк в тексте окна не изменялись ? (По сравнению с номерами этих строк до применения Format::LineGetDuplicates).
P.S. Плагин LineBoard включен.
Заранее благодарен за ответ.
Instructor спасибо большое за AkelPad.
У меня возник вопрос по данному плагину.
Вот что написано в описании:
Format::LineSortIntAsc
Сортировка строк текста по числовому возрастанию.
dracosha
Можно сначала отсортировать все строки, а потом выделить нужный столбец с зажатым Alt и отсортировать еще раз. Правда, Group0 и Group1 придется сортировать отдельно...
dracosha
Только без обид. Оказание помощи предполагает от просящего, как минимум, желание понять. Если вопрос так стоит, что Вы не желаете даже попробовать самостоятельно разобраться "как воспользоваться чужим скриптом", то предлагаю Вам воспользоваться каким-либо офисным пакетом (MS Excel или LibreOffice). Вероятно для Вас это будет проще и быстрее. Кроме того, это еще и избавит от необходимости "шаманить" над текстом из-за переменной длины и начальной позиции ключей сортировки (0-145).
1) открыть текстовый файл с сортируемым списком.
2) в мастере текстов указываем
на первом шаге: "с разделителями",
на втором шаге: "символом разделителем является" ставим птичку в [другой:], и указываем символ слэш [/]
3) Получаем текст в трех колонках.
Group0 Action0 descr=u13
Group0 Action1 descr=b3
Group0 Action10 descr=u5a
Group0 Action11 descr=u6
Group0 Action12 descr=u6a
...
4) В первых двух столбцах сделать замену "Group" и "Action" на "ничего". Получится так:
0 0 descr=u13
0 1 descr=b3
0 10 descr=u5a
0 11 descr=u6
0 12 descr=u6a
...
5) Сделать сортировку диапазона, указав последовательность (Столбец A, затем Столбец B, затем Столбец C)
6) Осталось склеить текст обратно, восстановив выброшенные слэши, "Group" и "Action". Для русской версии Excel формула будет такой (для второй строки):
=СЦЕПИТЬ("Group";A2;"/";"Action";B2;"/";C2)
7) Растягиваете формулу на все строки. Получаете что хотели
Group0/Action0/descr=u13
Group0/Action1/descr=b3
Group0/Action2/descr=u2
Group0/Action3/flags2=d1
Group0/Action10/descr=u5a
Group0/Action11/descr=u6
...
8) Копируете результат обратно в текстовый файл.
В случае с LibreOffice Calc разница в том, что он не умеет сортировать списки без заголовков, поэтому возможно придется добавить одну строку с "заголовками". И формулы там по английски (на примере второй строки):
=CONCATENATE("Group";A2;"/";"Action";B2;"/";C2)
Есть ограничение по максимальному количеству строк. Для Excel2003 - 65536 строк, LibreOffice - 1048575 строк (минус 1 на заголовки).