1

Тема: AHK: Команда обратной сортировки

По какой причине команда обратной сортировки срабатывает некорректно, - то есть, не сортирует строки от 14-го номера к первому?

links=
(
lnk/lnk1
lnk/lnk2
lnk/lnk3
lnk/lnk4
lnk/lnk5
lnk/lnk6
lnk/lnk7
lnk/lnk8
lnk/lnk9
lnk/lnk10
lnk/lnk11
lnk/lnk12
lnk/lnk13
lnk/lnk14
)
Sort, links, R ; Сортировка в обратном порядке
MsgBox % links

2 (изменено: john_dease, 2024-10-31 21:35:36)

Re: AHK: Команда обратной сортировки

Пока такой вариант:

arr := StrSplit(links, "`n", "`r")
max := arr.MaxIndex()
Loop % max {
   match := RegExReplace( arr[ max - A_Index + 1 ], "([^""]+).*", "$1" )
   links2 .= match "`n"
}
MsgBox, % links2

3

Re: AHK: Команда обратной сортировки

john_dease пишет:

срабатывает некорректно

Почему некорректно? Я вижу:

lnk/lnk9
lnk/lnk8
lnk/lnk7
lnk/lnk6
lnk/lnk5
lnk/lnk4
lnk/lnk3
lnk/lnk2
lnk/lnk14
lnk/lnk13
lnk/lnk12
lnk/lnk11
lnk/lnk10
lnk/lnk1

Значение символа "2" больше, чем "1", поэтому lnk/lnk2 идёт раньше, чем lnk/lnk14.
Если хотите, чтобы сортировалось в номерном порядке, то, если начало всегда одинаковое, можно так:

links=
(
lnk/lnk1
lnk/lnk2
lnk/lnk3
lnk/lnk4
lnk/lnk5
lnk/lnk6
lnk/lnk7
lnk/lnk8
lnk/lnk9
lnk/lnk10
lnk/lnk11
lnk/lnk12
lnk/lnk13
lnk/lnk14
)
Sort, links, P8 N R ; Сортировка в обратном цифровом порядке, начиная с 8 символа
MsgBox % links
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: john_dease, 2024-11-01 00:41:27)

Re: AHK: Команда обратной сортировки

Но ведь обратный порядок подразумевает, что начинать список должна строка с lnk14, а заканчивать - с lnk1? Иначе говоря, эта команда не должна исходить из значений содержимого строк, а лишь пересортировать в обратном порядке.

5

Re: AHK: Команда обратной сортировки

Нет, в данном случае опция R подразумевает обратный порядок по значению символов, от большего к меньшему. Если нужен обратный порядок в смысле порядка, в котором написано, то есть пример в справке.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Команда обратной сортировки

Имеется в виду этот пример? Как в нем задать символ перевода строки, вместо запятой?

MyVar := "1,2,3,4"
Sort, MyVar, F ReverseDirection D,
ReverseDirection(a1, a2, offset)
{
    return offset
}

7

Re: AHK: Команда обратной сортировки

Можно вообще опцию D не указывать, перевод строки является разделителем по умолчанию.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder