1. В функциях "Format::LineSortStrAsc" и "Format::LineSortStrDesc" добавить некий параметр, с помощью которого сортировка бы учитывала возрастание чисел (11>2).
2. В функциях "Format::LineSortIntAsc" и "Format::LineSortIntDesc" добавить некий параметр, с помощью которого сортировалось бы не просто по "комбинации символов, начинающихся с цифр", а только по цифрам. Т.е. что бы могла сохраниться "первоначальная сортировка.
P.S. В файле "Format-Rus.txt" строка 102 "" - лишняя.
Posted: Thu Sep 08, 2011 6:28 am
by Fr0sT
Специфический реквест, едва ли он кому-то еще понадобится. Тогда уж надо идти дальше и дать возможность указывать compare callback, который будет принимать две строки и возвращать результат сравнения. Но это уже будет на скриптах, соответственно, медленно.
Метод Format::LineReverse добавляет лишнюю строку
Выделите несколько строк , попробуйте сделать несколько раз
Posted: Fri Sep 09, 2011 10:52 am
by opk44
Andrey_A_A
Не совсем так. У меня описанное Вами воспроизводится только в том случае, если в выделение попадает последняя строка (которая не завершается парой 0D0A, т.е. "переводом каретки"). Сколько бы Вы не повторяли, больше одного перевода строки не появится. Кстати недавно по тому же поводу этот вопрос поднимался, вроде "ничем не кончилось".
Posted: Fri Sep 09, 2011 4:04 pm
by Instructor
Andrey_A_A
Видимо включен "SmartSel::NoSelEOL".
После:
AkelPad 4.6.4 (01.08.2011)
--------------------------
Добавлено: ручной параметр для "MouseOptions" со значением 16 - не выделять новую строку при тройном клике, а также при клике в зону левого отступа.
в "SmartSel::NoSelEOL" нет необходимости.
Posted: Fri Sep 09, 2011 6:05 pm
by Andrey_A_A
из справки
Определяет настройки мыши. Задается суммой членов:
1 - GUI.
2 - GUI.
4 - GUI.
8 - GUI.
16 - Не выделять новую строку при клике в зону левого отступа, а также при тройном клике.
По умолчанию: 1+2+4=7.
Работаю с большими списками слов, выяснил следующее:
функция
Call("Format::LineRemoveDuplicates")
Call("Format::LineGetUnique")
Call("Format::LineGetDuplicates")
работает очень медленно
проверял на списках 120.000 строк и выше
взять к примеру этот код на vbs - работает моментально
' Функция удаления из массива одинаковых значений
Function DelDublicateArr(Arrr)
Dim oDict, Item, Key
Set oDict = CreateObject("Scripting.Dictionary")
oDict.RemoveAll
oDict.CompareMode = 0
For Each Item In Arrr
If Len(Item) > 0 Then
If Not oDict.Exists(Item) Then oDict.Add Item, Item
End If
Next
Key = oDict.Keys
Set oDict = Nothing
DelDublicateArr = Key
End Function
' Функция сортировки элементов текстового массива по возрастанию
Function SelectingArrUp(ArrS)
Call SortingUp(ArrS, 0, Ubound(ArrS) - 1)
SelectingArrUp = ArrS
End Function
' процедура быстрой сортировки по возрастанию
Sub SortingUp(sArr, ll, rr)
Dim ii, jj, xx, yy
ii = ll : jj = rr
xx = sArr((ll + rr) \ 2)
Do
While sArr(ii) < xx
ii = ii + 1
Wend
While xx < sArr(jj)
jj = jj - 1
Wend
If ii <= jj Then
If sArr(ii) <> sArr(jj) Then
yy = sArr(ii) : sArr(ii) = sArr(jj) : sArr(jj) = yy
End If
ii = ii + 1 : jj = jj - 1
End If
Loop Until ii > jj
If ll < jj Then SortingUp sArr, ll, jj
If ii < rr Then SortingUp sArr, ii, rr
End Sub
Posted: Sun Sep 11, 2011 3:13 pm
by Instructor
Andrey_A_A
Массив еще сформировать надо Полный код скриптов приведите.
Posted: Sun Sep 11, 2011 3:33 pm
by Andrey_A_A
Там всё просто, я не умею пока работать с памятью - просто выделяю и сортирую и вставляю обратно
With AkelPad
tTxt = .GetSelText()
If Len(tTxt) = 0 Then
Call .SetSel(0, -1) : tTxt = .GetSelText()
End If
If Len(tTxt) = 0 Then Wscript.Quit
Txt = Split(tTxt, Chr(13))
End With
Text = Join(SelectingArrUp(Txt), vbNewLine)
Call AkelPad.ReplaceSel(Text)
' Функция сортировки элементов текстового массива по возрастанию
Function SelectingArrUp(ArrS)
Call SortingUp(ArrS, 0, Ubound(ArrS) - 1)
SelectingArrUp = ArrS
End Function
' процедура быстрой сортировки по возрастанию
Sub SortingUp(sArr, ll, rr)
Dim ii, jj, xx, yy
ii = ll : jj = rr
xx = sArr((ll + rr) \ 2)
Do
While sArr(ii) < xx
ii = ii + 1
Wend
While xx < sArr(jj)
jj = jj - 1
Wend
If ii <= jj Then
If sArr(ii) <> sArr(jj) Then
yy = sArr(ii) : sArr(ii) = sArr(jj) : sArr(jj) = yy
End If
ii = ii + 1 : jj = jj - 1
End If
Loop Until ii > jj
If ll < jj Then SortingUp sArr, ll, jj
If ii < rr Then SortingUp sArr, ii, rr
End Sub
второй такой же
вместо
Text = Join(SelectingArrUp(Txt), vbNewLine)
вставить
Text = Join(SelectingArrUp(Txt), vbNewLine)
и функцию приведенную выше
Posted: Mon Sep 12, 2011 3:44 am
by Instructor
Andrey_A_A
Да, удаление дубликатов заметно быстрее - будем оптимизировать