Настройка -> Сортировка

Модератор: motyara

Аватара пользователя
kostik-aaron
Охотник за багами
Сообщения: 211
Зарегистрирован: Пт фев 15, 2008 12:34 pm
Откуда: Зеленоград
Контактная информация:

Настройка -> Сортировка

Сообщение kostik-aaron » Пт апр 25, 2008 9:50 am

Что за группы сортировки? с чем их едят? и почему, если я в строке "расширения группы" нажимаю 123456789 по очереди, хотя ещё не нажимаю "добавить", но у меня появляются группы сортировки 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789?
Настоящий инженер учится всю жизнь!

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Пт апр 25, 2008 7:58 pm

Вообще при чистой установке программы в качестве предустановленных групп сортировки уже есть две:
1. EXE;COM;BAT;MSI
2. ZIP;RAR;ACE;TAR
Вообще смысл их довольно простой - в зависимости от расширений файлов, раходящихся в группе сортировки, а также от позиции каждой группы можно функции сортировки указать какие файлы при сортировке надо вынести наверх в списке. То есть при указанных двух группах сортировки в списке файлов в панели сначала будут идти файлы с расширениями EXE,COM,BAT,MSI, затем с расширениями ZIP,RAR,ACE,TAR, а потом уже все остальные...

Что касается ситуации с цифрами "123456...", то это лишь небольшой баг, безвредный и безобидный. То есть в момент правки расширений группы необходимо выбрать какую-либо группу.

Аватара пользователя
kostik-aaron
Охотник за багами
Сообщения: 211
Зарегистрирован: Пт фев 15, 2008 12:34 pm
Откуда: Зеленоград
Контактная информация:

Re:

Сообщение kostik-aaron » Сб апр 26, 2008 7:56 am

Max Diesel писал(а):Вообще при чистой установке программы в качестве предустановленных групп сортировки уже есть две:
1. EXE;COM;BAT;MSI
2. ZIP;RAR;ACE;TAR
Эти группы должны быть видны в этих списках? Что-то я их нигде не нашёл после установки...
Настоящий инженер учится всю жизнь!

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Сб апр 26, 2008 7:23 pm

Да, но при чистой установке программы, то есть в новый каталог (в котором нет ini-файлов), причем предполагается установка инсталлятором, а не распаковкой из zip-архива.

EgOrus
Сообщения: 11
Зарегистрирован: Пт апр 18, 2008 12:08 pm

Re:

Сообщение EgOrus » Сб май 03, 2008 1:32 pm

Max Diesel писал(а):Да, но при чистой установке программы, то есть в новый каталог (в котором нет ini-файлов), причем предполагается установка инсталлятором, а не распаковкой из zip-архива.
на сколько я понял из своих экспериментов, шаблоны типа *HTM* не поддерживаются? и в шаблонах "окрашивания файлов" тоже?

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Сб май 03, 2008 10:33 pm

Смотря для чего... для поиска, насколько я знаю, шаблон можно записать и так, а вот при перечислении расширений файлов для групп поиска и для окрашивания файлов по расширению необходимо использовать точку с запятой (";") в качестве разделителя.

EgOrus
Сообщения: 11
Зарегистрирован: Пт апр 18, 2008 12:08 pm

Re:

Сообщение EgOrus » Вс май 04, 2008 9:34 pm

Max Diesel писал(а):Смотря для чего... для поиска, насколько я знаю, шаблон можно записать и так, а вот при перечислении расширений файлов для групп поиска и для окрашивания файлов по расширению необходимо использовать точку с запятой (";") в качестве разделителя.
я имел ввиду возможность использования шаблонов при задании групп сортировки и окрашивания, понятно что нужно использовать ";" кстати в файлах настроек почему-то используется др. синтаксис .HTM.HTML.SHTM.SHTML хотелось бы сократить строчку до .*HTM*.
И еще, поясните плиз как использовать окрашивание по поисковым запросам?

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Пн май 05, 2008 2:18 am

EgOrus писал(а):я имел ввиду возможность использования шаблонов при задании групп сортировки и окрашивания, понятно что нужно использовать ";" кстати в файлах настроек почему-то используется др. синтаксис .HTM.HTML.SHTM.SHTML хотелось бы сократить строчку до .*HTM*.
В ini-файлах расширения разделены точками потому, что в таком формате проще проверять факт принадлежности обрабатываемого расширения группе каких-либо расширений. Шаблоны и расширения - очень разные вещи, проверка на соответствие шаблону примерно в 25 раз дольше выполняется нежели проверка нахождения одной строки в составе другой.
EgOrus писал(а):И еще, поясните плиз как использовать окрашивание по поисковым запросам?
Все очень просто - как и в TC необходимо создать поисковый запрос (там вероятно называется по-другому) в окне поиска файлов, сохранить этот запрос, а затем уже в настройках кликнув дважды по нему в списке доступных запросов перевести в список активных... ну и назначить цвет.

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy » Пн июн 28, 2010 4:21 pm

Max Diesel писал(а):В ini-файлах расширения разделены точками потому, что в таком формате проще проверять факт принадлежности обрабатываемого расширения группе каких-либо расширений. Шаблоны и расширения - очень разные вещи, проверка на соответствие шаблону примерно в 25 раз дольше выполняется нежели проверка нахождения одной строки в составе другой.
Откуда 25 раз? Проверка на соответствие шаблону может быть сделана за время не хуже квадрата длины строки, а в большинстве случаев - близкое к линейному. А так как расширение обычно не превосходит нескольких символов, то не думаю, что проверка может замедлиться больше чем в 2-3 раза (в зависимости от используемых шаблонов), что несущественно. При этом, если пользователь не будет использовать шаблоны (или даже только символ '*'), то скорость не изменится.

В общем, мне бы тоже хотелось иметь возможность указывать шаблон в качестве расширения. Именно расширения, а не имени файла.

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy » Пн июн 28, 2010 6:08 pm

Ещё хотелось бы разрешить использовать в расширении точку. А в ini-файле их писать через что-то, чего не может быть в имени файла, например, двоеточие.

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Вт июн 29, 2010 3:33 pm

Qwertiy писал(а):Откуда 25 раз? Проверка на соответствие шаблону может быть сделана за время не хуже квадрата длины строки, а в большинстве случаев - близкое к линейному. А так как расширение обычно не превосходит нескольких символов, то не думаю, что проверка может замедлиться больше чем в 2-3 раза (в зависимости от используемых шаблонов), что несущественно. При этом, если пользователь не будет использовать шаблоны (или даже только символ '*'), то скорость не изменится.

В общем, мне бы тоже хотелось иметь возможность указывать шаблон в качестве расширения. Именно расширения, а не имени файла.
Цифра "25" была не просто предположением, вероятно я специально проверял отличие скорости поиска строки в строке и проверки соответствия маске. Шаблоны в качестве расширения на мой взгляд в разы снизили бы скорость процесса сортировки. Да и практический смысл в этом явно не оправдывает затрат.
Qwertiy писал(а):Ещё хотелось бы разрешить использовать в расширении точку. А в ini-файле их писать через что-то, чего не может быть в имени файла, например, двоеточие.
Насколько мне известно, расширением символически считается та часть имени файла, которая расположена после последней точки, соответственно расширение не может содержать точку.

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy » Вт июн 29, 2010 6:09 pm

Max Diesel писал(а):Цифра "25" была не просто предположением, вероятно я специально проверял отличие скорости поиска строки в строке и проверки соответствия маске. Шаблоны в качестве расширения на мой взгляд в разы снизили бы скорость процесса сортировки. Да и практический смысл в этом явно не оправдывает затрат.
Не знаю, что у Вас за алгоритм, но 25 - это очень много. Попробуйте мой вариант (видимо, придётся заменить char на wchar_t и сделать сравнение без учёта регистра):

Код: Выделить всё

bool check(char *s, char *t)
{
char *rs=0, *rt;
while(1)
  if(*t=='*')
    rs=s, rt=++t;
  else if(!*s)
    return !*t;
  else if(*s==*t || *t=='?')
    ++s, ++t;
  else if(rs)
    s=++rs, t=rt;
  else
    return false;
}
При длине строк до 10000 символов время работы до 23 мс. Только не надо переставлять (и добавлять) проверки - их порядок не случаен и только в таком виде алгоритм работает правильно.
Max Diesel писал(а):
Qwertiy писал(а):Ещё хотелось бы разрешить использовать в расширении точку. А в ini-файле их писать через что-то, чего не может быть в имени файла, например, двоеточие.
Насколько мне известно, расширением символически считается та часть имени файла, которая расположена после последней точки, соответственно расширение не может содержать точку.
Да, это определение расширения... UC так и работает. Для сравнения, Проводник считает, что расширение не может содержать пробел, а Фрегат - что в нём должно быть не более 5 символов, нет пробелов и хотя бы один символ не цифра... Кстати, Проводник позволяет прописать тип файла с точкой, но потом его игнорирует.
В общем, это не важно. При желании можно рассматривать как расширение конец имени файла, стоящий после точки. Из общеизвестного могу назвать файлы во время их загрузки Download Master'ом:

Код: Выделить всё

name.ext.DMF
Хотелось бы видеть их в нужной группе... И сам я часто использую конструкции такого типа...

Если проверять имя файла на соответствие шаблону с конца, а не с начала, то не надо смотреть первую '*', что ускорит проверку.

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Ср июн 30, 2010 1:10 am

Qwertiy писал(а):Не знаю, что у Вас за алгоритм, но 25 - это очень много. Попробуйте мой вариант (видимо, придётся заменить char на wchar_t и сделать сравнение без учёта регистра)
При длине строк до 10000 символов время работы до 23 мс. Только не надо переставлять (и добавлять) проверки - их порядок не случаен и только в таком виде алгоритм работает правильно.
Хм... действительно, эта функция шустрая, она работает примерно в 25-ть раз быстрее чем штатная функция "MatchesMask" (и качество определения соответствия маске вроде бы очень высокое). Мне даже стало немного жаль что функция "MatchesMask" в программе используется не очень часто, а то можно было бы заменить ее на эту супербыструю функцию и получить значительное увеличение скорости...
Qwertiy писал(а):Да, это определение расширения... UC так и работает. Для сравнения, Проводник считает, что расширение не может содержать пробел, а Фрегат - что в нём должно быть не более 5 символов, нет пробелов и хотя бы один символ не цифра... Кстати, Проводник позволяет прописать тип файла с точкой, но потом его игнорирует.
В общем, это не важно. При желании можно рассматривать как расширение конец имени файла, стоящий после точки. Из общеизвестного могу назвать файлы во время их загрузки Download Master'ом:

Код: Выделить всё

name.ext.DMF
Хотелось бы видеть их в нужной группе... И сам я часто использую конструкции такого типа...

Если проверять имя файла на соответствие шаблону с конца, а не с начала, то не надо смотреть первую '*', что ускорит проверку.
Как я уже упомянул чуть выше, вряд ли затраченные на распознание нескольких расширений операции будут оправданы результатом. Фактически это значительно снизило бы скорость чтения листинга, то есть вход в каталог происходил бы дольше. Использование же совокупности масок вместо совокупности разделенных точкой расширений предположительно должно привести к большему расходу памяти (String vs TStringList), поэтому хотя вариант при учете неплохих результатов функции определения соответствия маске и кажется мне занятным, но тем не менее он лишь может попасть в список возможных нововведений.

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy » Ср июн 30, 2010 2:15 am

Max Diesel писал(а):Хм... действительно, эта функция шустрая, она работает примерно в 25-ть раз быстрее чем штатная функция "MatchesMask"
Вот и нашлись те самые 25 раз...
Max Diesel писал(а):и качество определения соответствия маске вроде бы очень высокое
Могу обосновать её работу:
1. Единственный символ шаблона, которому может соответствовать пустая строка в имени - это '*', поэтому эта проверка должна быть первой.
2. Если в шаблоне встретилась '*', то мы можем заменить её на подстроку любой длины (от 0 до длины всей оставшейся части строки). Будем перебирать все варианты в порядке увеличения длины, т. е. пропускать на 1 символ больше после каждой неудачи.
3. Если в шаблоне есть несколько '*', то при неудаче достаточно возврата к последней. Увеличение числа пропускаемых символов у более ранней '*' не может улучшить результат, т. к. подстрока между '*' уже соответствует участку шаблона, при этом величина сдвига уменьшиться не может, а её увеличение возможно и за счёт последней '*'.
4. Если строка закончилась, то это означает конец проверки. Результат соответствует тому, достигнут ли конец шаблона. Это объясняется тем, что единственный символ шаблона, который может что-то изменить - это '*'. Однако, количество пропущенных символов уменьшить нельзя, а его увеличение не сможет изменить результат (конец строки будет достигнут ещё раньше). Кроме того, в шаблоне не могут остаться только '*', т. к. проверка конца строки делается после проверки на '*' в шаблоне.
Max Diesel писал(а):Мне даже стало немного жаль что функция "MatchesMask" в программе используется не очень часто, а то можно было бы заменить ее на эту супербыструю функцию и получить значительное увеличение скорости...
Ну, есть поиск файлов и окрашивание по поисковым запросам...
Хотя я не уверен, используется ли она в поиске... Наверное, нет.
Max Diesel писал(а):Как я уже упомянул чуть выше, вряд ли затраченные на распознание нескольких расширений операции будут оправданы результатом. Фактически это значительно снизило бы скорость чтения листинга, то есть вход в каталог происходил бы дольше.
За счёт чего? Если просматривать имя файла с конца на наличие совпадения с одним из расширений, то время сравнения не зависит от наличия знака '.' в сравниваемых строках. Единственное увеличение времени возможно из-за большей длины строки для сравнения, однако это зависит исключительно от пользователя и того, что он хочет...
Max Diesel писал(а):Использование же совокупности масок вместо совокупности разделенных точкой расширений предположительно должно привести к большему расходу памяти (String vs TStringList), поэтому хотя вариант при учете неплохих результатов функции определения соответствия маске и кажется мне занятным, но тем не менее он лишь может попасть в список возможных нововведений.
При небольшой модификации функции проверки соответствия шаблону, возможно использование строки масок, разделённых символом ':'.
При этом время сравнения увеличивается незначительно (если стараться не использовать '*' в шаблонах). Если в шаблоне есть только текст и '?', то время сравнения увеличится не более чем в 2 раза (думаю, меньше), однако использование, напримервместо

Код: Выделить всё

::odt:ods:odf:odp:odb:odm:odg:
даёт заметный выигрыш в скорости.
Кстати, строки я написал именно так, как предлагаю их хранить и обрабатывать... Почему начало строки "::"? Для проверки конца (а точнее начала) строки при сравнении с шаблоном.

Ещё вопрос. Есть способ указать цвет для папок не поисковым запросом? А то как-то не очень рационально здесь поисковый запрос использовать...

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3123
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Пн июл 05, 2010 3:22 am

Qwertiy писал(а):Есть способ указать цвет для папок не поисковым запросом? А то как-то не очень рационально здесь поисковый запрос использовать...
На данный момент другого способа нет.

Ответить