Настройка -> Сортировка
Модератор: motyara
-
- Охотник за багами
- Сообщения: 211
- Зарегистрирован: Пт фев 15, 2008 12:34 pm
- Откуда: Зеленоград
Настройка -> Сортировка
Что за группы сортировки? с чем их едят? и почему, если я в строке "расширения группы" нажимаю 123456789 по очереди, хотя ещё не нажимаю "добавить", но у меня появляются группы сортировки 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789?
Настоящий инженер учится всю жизнь!
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
Вообще при чистой установке программы в качестве предустановленных групп сортировки уже есть две:
1. EXE;COM;BAT;MSI
2. ZIP;RAR;ACE;TAR
Вообще смысл их довольно простой - в зависимости от расширений файлов, раходящихся в группе сортировки, а также от позиции каждой группы можно функции сортировки указать какие файлы при сортировке надо вынести наверх в списке. То есть при указанных двух группах сортировки в списке файлов в панели сначала будут идти файлы с расширениями EXE,COM,BAT,MSI, затем с расширениями ZIP,RAR,ACE,TAR, а потом уже все остальные...
Что касается ситуации с цифрами "123456...", то это лишь небольшой баг, безвредный и безобидный. То есть в момент правки расширений группы необходимо выбрать какую-либо группу.
1. EXE;COM;BAT;MSI
2. ZIP;RAR;ACE;TAR
Вообще смысл их довольно простой - в зависимости от расширений файлов, раходящихся в группе сортировки, а также от позиции каждой группы можно функции сортировки указать какие файлы при сортировке надо вынести наверх в списке. То есть при указанных двух группах сортировки в списке файлов в панели сначала будут идти файлы с расширениями EXE,COM,BAT,MSI, затем с расширениями ZIP,RAR,ACE,TAR, а потом уже все остальные...
Что касается ситуации с цифрами "123456...", то это лишь небольшой баг, безвредный и безобидный. То есть в момент правки расширений группы необходимо выбрать какую-либо группу.
-
- Охотник за багами
- Сообщения: 211
- Зарегистрирован: Пт фев 15, 2008 12:34 pm
- Откуда: Зеленоград
Re:
Эти группы должны быть видны в этих списках? Что-то я их нигде не нашёл после установки...Max Diesel писал(а):Вообще при чистой установке программы в качестве предустановленных групп сортировки уже есть две:
1. EXE;COM;BAT;MSI
2. ZIP;RAR;ACE;TAR
Настоящий инженер учится всю жизнь!
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
-
- Сообщения: 11
- Зарегистрирован: Пт апр 18, 2008 12:08 pm
Re:
на сколько я понял из своих экспериментов, шаблоны типа *HTM* не поддерживаются? и в шаблонах "окрашивания файлов" тоже?Max Diesel писал(а):Да, но при чистой установке программы, то есть в новый каталог (в котором нет ini-файлов), причем предполагается установка инсталлятором, а не распаковкой из zip-архива.
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
-
- Сообщения: 11
- Зарегистрирован: Пт апр 18, 2008 12:08 pm
Re:
я имел ввиду возможность использования шаблонов при задании групп сортировки и окрашивания, понятно что нужно использовать ";" кстати в файлах настроек почему-то используется др. синтаксис .HTM.HTML.SHTM.SHTML хотелось бы сократить строчку до .*HTM*.Max Diesel писал(а):Смотря для чего... для поиска, насколько я знаю, шаблон можно записать и так, а вот при перечислении расширений файлов для групп поиска и для окрашивания файлов по расширению необходимо использовать точку с запятой (";") в качестве разделителя.
И еще, поясните плиз как использовать окрашивание по поисковым запросам?
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
В ini-файлах расширения разделены точками потому, что в таком формате проще проверять факт принадлежности обрабатываемого расширения группе каких-либо расширений. Шаблоны и расширения - очень разные вещи, проверка на соответствие шаблону примерно в 25 раз дольше выполняется нежели проверка нахождения одной строки в составе другой.EgOrus писал(а):я имел ввиду возможность использования шаблонов при задании групп сортировки и окрашивания, понятно что нужно использовать ";" кстати в файлах настроек почему-то используется др. синтаксис .HTM.HTML.SHTM.SHTML хотелось бы сократить строчку до .*HTM*.
Все очень просто - как и в TC необходимо создать поисковый запрос (там вероятно называется по-другому) в окне поиска файлов, сохранить этот запрос, а затем уже в настройках кликнув дважды по нему в списке доступных запросов перевести в список активных... ну и назначить цвет.EgOrus писал(а):И еще, поясните плиз как использовать окрашивание по поисковым запросам?
-
- Охотник за багами
- Сообщения: 1199
- Зарегистрирован: Вс янв 31, 2010 12:12 am
Откуда 25 раз? Проверка на соответствие шаблону может быть сделана за время не хуже квадрата длины строки, а в большинстве случаев - близкое к линейному. А так как расширение обычно не превосходит нескольких символов, то не думаю, что проверка может замедлиться больше чем в 2-3 раза (в зависимости от используемых шаблонов), что несущественно. При этом, если пользователь не будет использовать шаблоны (или даже только символ '*'), то скорость не изменится.Max Diesel писал(а):В ini-файлах расширения разделены точками потому, что в таком формате проще проверять факт принадлежности обрабатываемого расширения группе каких-либо расширений. Шаблоны и расширения - очень разные вещи, проверка на соответствие шаблону примерно в 25 раз дольше выполняется нежели проверка нахождения одной строки в составе другой.
В общем, мне бы тоже хотелось иметь возможность указывать шаблон в качестве расширения. Именно расширения, а не имени файла.
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
Цифра "25" была не просто предположением, вероятно я специально проверял отличие скорости поиска строки в строке и проверки соответствия маске. Шаблоны в качестве расширения на мой взгляд в разы снизили бы скорость процесса сортировки. Да и практический смысл в этом явно не оправдывает затрат.Qwertiy писал(а):Откуда 25 раз? Проверка на соответствие шаблону может быть сделана за время не хуже квадрата длины строки, а в большинстве случаев - близкое к линейному. А так как расширение обычно не превосходит нескольких символов, то не думаю, что проверка может замедлиться больше чем в 2-3 раза (в зависимости от используемых шаблонов), что несущественно. При этом, если пользователь не будет использовать шаблоны (или даже только символ '*'), то скорость не изменится.
В общем, мне бы тоже хотелось иметь возможность указывать шаблон в качестве расширения. Именно расширения, а не имени файла.
Насколько мне известно, расширением символически считается та часть имени файла, которая расположена после последней точки, соответственно расширение не может содержать точку.Qwertiy писал(а):Ещё хотелось бы разрешить использовать в расширении точку. А в ini-файле их писать через что-то, чего не может быть в имени файла, например, двоеточие.
-
- Охотник за багами
- Сообщения: 1199
- Зарегистрирован: Вс янв 31, 2010 12:12 am
Не знаю, что у Вас за алгоритм, но 25 - это очень много. Попробуйте мой вариант (видимо, придётся заменить char на wchar_t и сделать сравнение без учёта регистра):Max Diesel писал(а):Цифра "25" была не просто предположением, вероятно я специально проверял отличие скорости поиска строки в строке и проверки соответствия маске. Шаблоны в качестве расширения на мой взгляд в разы снизили бы скорость процесса сортировки. Да и практический смысл в этом явно не оправдывает затрат.
Код: Выделить всё
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;
}
Да, это определение расширения... UC так и работает. Для сравнения, Проводник считает, что расширение не может содержать пробел, а Фрегат - что в нём должно быть не более 5 символов, нет пробелов и хотя бы один символ не цифра... Кстати, Проводник позволяет прописать тип файла с точкой, но потом его игнорирует.Max Diesel писал(а):Насколько мне известно, расширением символически считается та часть имени файла, которая расположена после последней точки, соответственно расширение не может содержать точку.Qwertiy писал(а):Ещё хотелось бы разрешить использовать в расширении точку. А в ini-файле их писать через что-то, чего не может быть в имени файла, например, двоеточие.
В общем, это не важно. При желании можно рассматривать как расширение конец имени файла, стоящий после точки. Из общеизвестного могу назвать файлы во время их загрузки Download Master'ом:
Код: Выделить всё
name.ext.DMF
Если проверять имя файла на соответствие шаблону с конца, а не с начала, то не надо смотреть первую '*', что ускорит проверку.
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
Хм... действительно, эта функция шустрая, она работает примерно в 25-ть раз быстрее чем штатная функция "MatchesMask" (и качество определения соответствия маске вроде бы очень высокое). Мне даже стало немного жаль что функция "MatchesMask" в программе используется не очень часто, а то можно было бы заменить ее на эту супербыструю функцию и получить значительное увеличение скорости...Qwertiy писал(а):Не знаю, что у Вас за алгоритм, но 25 - это очень много. Попробуйте мой вариант (видимо, придётся заменить char на wchar_t и сделать сравнение без учёта регистра)
При длине строк до 10000 символов время работы до 23 мс. Только не надо переставлять (и добавлять) проверки - их порядок не случаен и только в таком виде алгоритм работает правильно.
Как я уже упомянул чуть выше, вряд ли затраченные на распознание нескольких расширений операции будут оправданы результатом. Фактически это значительно снизило бы скорость чтения листинга, то есть вход в каталог происходил бы дольше. Использование же совокупности масок вместо совокупности разделенных точкой расширений предположительно должно привести к большему расходу памяти (String vs TStringList), поэтому хотя вариант при учете неплохих результатов функции определения соответствия маске и кажется мне занятным, но тем не менее он лишь может попасть в список возможных нововведений.Qwertiy писал(а):Да, это определение расширения... UC так и работает. Для сравнения, Проводник считает, что расширение не может содержать пробел, а Фрегат - что в нём должно быть не более 5 символов, нет пробелов и хотя бы один символ не цифра... Кстати, Проводник позволяет прописать тип файла с точкой, но потом его игнорирует.
В общем, это не важно. При желании можно рассматривать как расширение конец имени файла, стоящий после точки. Из общеизвестного могу назвать файлы во время их загрузки Download Master'ом:Хотелось бы видеть их в нужной группе... И сам я часто использую конструкции такого типа...Код: Выделить всё
name.ext.DMF
Если проверять имя файла на соответствие шаблону с конца, а не с начала, то не надо смотреть первую '*', что ускорит проверку.
-
- Охотник за багами
- Сообщения: 1199
- Зарегистрирован: Вс янв 31, 2010 12:12 am
Вот и нашлись те самые 25 раз...Max Diesel писал(а):Хм... действительно, эта функция шустрая, она работает примерно в 25-ть раз быстрее чем штатная функция "MatchesMask"
Могу обосновать её работу:Max Diesel писал(а):и качество определения соответствия маске вроде бы очень высокое
1. Единственный символ шаблона, которому может соответствовать пустая строка в имени - это '*', поэтому эта проверка должна быть первой.
2. Если в шаблоне встретилась '*', то мы можем заменить её на подстроку любой длины (от 0 до длины всей оставшейся части строки). Будем перебирать все варианты в порядке увеличения длины, т. е. пропускать на 1 символ больше после каждой неудачи.
3. Если в шаблоне есть несколько '*', то при неудаче достаточно возврата к последней. Увеличение числа пропускаемых символов у более ранней '*' не может улучшить результат, т. к. подстрока между '*' уже соответствует участку шаблона, при этом величина сдвига уменьшиться не может, а её увеличение возможно и за счёт последней '*'.
4. Если строка закончилась, то это означает конец проверки. Результат соответствует тому, достигнут ли конец шаблона. Это объясняется тем, что единственный символ шаблона, который может что-то изменить - это '*'. Однако, количество пропущенных символов уменьшить нельзя, а его увеличение не сможет изменить результат (конец строки будет достигнут ещё раньше). Кроме того, в шаблоне не могут остаться только '*', т. к. проверка конца строки делается после проверки на '*' в шаблоне.
Ну, есть поиск файлов и окрашивание по поисковым запросам...Max Diesel писал(а):Мне даже стало немного жаль что функция "MatchesMask" в программе используется не очень часто, а то можно было бы заменить ее на эту супербыструю функцию и получить значительное увеличение скорости...
Хотя я не уверен, используется ли она в поиске... Наверное, нет.
За счёт чего? Если просматривать имя файла с конца на наличие совпадения с одним из расширений, то время сравнения не зависит от наличия знака '.' в сравниваемых строках. Единственное увеличение времени возможно из-за большей длины строки для сравнения, однако это зависит исключительно от пользователя и того, что он хочет...Max Diesel писал(а):Как я уже упомянул чуть выше, вряд ли затраченные на распознание нескольких расширений операции будут оправданы результатом. Фактически это значительно снизило бы скорость чтения листинга, то есть вход в каталог происходил бы дольше.
При небольшой модификации функции проверки соответствия шаблону, возможно использование строки масок, разделённых символом ':'.Max Diesel писал(а):Использование же совокупности масок вместо совокупности разделенных точкой расширений предположительно должно привести к большему расходу памяти (String vs TStringList), поэтому хотя вариант при учете неплохих результатов функции определения соответствия маске и кажется мне занятным, но тем не менее он лишь может попасть в список возможных нововведений.
При этом время сравнения увеличивается незначительно (если стараться не использовать '*' в шаблонах). Если в шаблоне есть только текст и '?', то время сравнения увеличится не более чем в 2 раза (думаю, меньше), однако использование, например
Код: Выделить всё
::od?:
Код: Выделить всё
::odt:ods:odf:odp:odb:odm:odg:
Кстати, строки я написал именно так, как предлагаю их хранить и обрабатывать... Почему начало строки "::"? Для проверки конца (а точнее начала) строки при сравнении с шаблоном.
Ещё вопрос. Есть способ указать цвет для папок не поисковым запросом? А то как-то не очень рационально здесь поисковый запрос использовать...
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm