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

Модератор: motyara

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

Сообщение Max Diesel » Вс сен 05, 2010 1:03 pm

Qwertiy писал(а):1. Компилируете код (из предыдущего моего сообщения), создаёте папку с именем Temp (или добавляете вызов "system("md Temp");" в программу), после чего запускаете. То, что выведено на экран делаете группами сортировки, затем открываете папку Temp в UC и убеждаетесь, что файлы отсортированы по значению в скобках.
2. После набора точки, точка в шаблоне исчезает, но звёздочка остаётся...
3. Функция проверки на соответствие имени строке масок работает независимо от наличия у файла расширения. Не понимаю, чем отсутствие проверки на наличие расширения снизит скорость сортировки...
4. Об оптимизации функции для ":*" мало кто знает...
1 - подозреваю что убедиться в этом мне не удалось, переименовываю файл "3QQQ (73).H" в "3QQQ (68).H" и получаю вот такую сортировку группы "H":

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

0QQQ (70).H
1QQQ (71).H
2QQQ (72).H
3QQQ (68).H
4QQQ (74).H
5QQQ (75).H
6QQQ (76).H
7QQQ (77).H
8QQQ (78).H
9QQQ (79).H
10QQQ (710).H
Полагаю по ней видно что сортировано не по значениям в скобках.
2 - звездочка остается в связи с тем фактом что я не предполагал задания имени файла в качестве маски... то есть нельзя указать "asd.zxc", нужно чтобы была маска, то есть либо "*asd.zxc", либо "asd*.zxc".
3 - имелось в виду что дополнительная проверка снизит скорость. [/color]

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

Сообщение Qwertiy » Вс сен 05, 2010 11:15 pm

Max Diesel писал(а):переименовываю файл "3QQQ (73).H" в "3QQQ (68).H" и получаю вот такую сортировку группы "H":
Даже не предполагал, что меня можно так понять...
Нарушение групп сортировки.7z
Скринвидео
(547.93 КБ) 114 скачиваний
И ещё: группы сортировки не учитываются, если сортировка идёт не по имени...
Max Diesel писал(а):3 - имелось в виду что дополнительная проверка снизит скорость.
Какая именно дополнительная проверка? Для проверки на группу сортировки надо передать имя файла в функцию сравнения, которая работает назависимо от наличия расширения, следовательно дополнительных проверок не требуется. Сейчас же перед этим делается проверка на наличие расширения (которую я предлагаю убрать), причём, в случае его отсутствия имя не проверяется на принадлежность группам. Что-то не вижу в этом ни логики, ни смысла...

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

Сообщение Max Diesel » Пн сен 06, 2010 2:20 pm

Qwertiy писал(а):Даже не предполагал, что меня можно так понять...
Странностей сортировки не видно при сортировке "по типу", лишь "по имени"... поэтому я и не увидел ничего необычного (о том, что надо было именно сортировать "по имени" в Вашем сообщении не упоминалось или же я упоминания не заметил). Исправлено, спасибо за информацию.
Qwertiy писал(а):И ещё: группы сортировки не учитываются, если сортировка идёт не по имени...
Группы сортировки имеют значение лишь при сортировке "по имени" и "по типу". Полагаю группы просто-напросто неприменимы к сортировкам по размеру и по дате.
Qwertiy писал(а):Какая именно дополнительная проверка? Для проверки на группу сортировки надо передать имя файла в функцию сравнения, которая работает назависимо от наличия расширения, следовательно дополнительных проверок не требуется. Сейчас же перед этим делается проверка на наличие расширения (которую я предлагаю убрать), причём, в случае его отсутствия имя не проверяется на принадлежность группам. Что-то не вижу в этом ни логики, ни смысла...
Оказалось что та самая "дополнительная проверка" уже есть в коде программы и сделана она для того (если не ошибаюсь) чтобы файлы без расширений попадали наверх сортируемого списка, а не вниз (при сортировке по типу с возрастанием). Впрочем, как ни странно, но при текущем алгоритме сравнения строк (при сортировке) такие файлы попадают наверх даже отсутствии дополнительной проверки, поэтому я могу ее убрать. Однако у меня есть подозрения что причина ее пребывания в коде могла быть все-таки в чем-то другом, соответственно убрав ее я могу нарушить какой-либо аспект сортировки.

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

Сообщение Qwertiy » Вс сен 19, 2010 11:18 pm

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

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

Re: Окрашивание файлов

Сообщение Qwertiy » Вс сен 19, 2010 11:38 pm

Max Diesel писал(а):
Qwertiy писал(а):После добавления шаблонов для групп сортировки возникает вопрос об окрашивании файлов. Логично красить группу, поэтому надеюсь, что в стилях оформления расширения будут также дополнены масками (без использования поисковых запросов). Предлагаю именно дополнить, а не заменить. Всё-таки мне кажется, со временем Вы добавите шаблоны расширений, как более естественный вариант...
К сожалению по этому направлению есть проблемы в плане совместимости, ведь если сохранять не расширения а шаблоны, то нужно еще модифицировать скрипты на сайте, которые отвечают за раздачу стилей... то есть "новый" стиль без коррекции не сможет быть воспринят старой версией программы.
Новая версия - самый подходящий момент сделать формат стилей несовместимым со старым...

Но есть вариант сделать и без несовместимости - конвертировать строки с разделителем '.' в строки с разделителем ':' при считывании, а затем вызывать функцию проверки на соответствие уже с новым форматом строк.

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

Сообщение Qwertiy » Пн сен 20, 2010 1:16 am

Qwertiy писал(а):Но есть вариант сделать и без несовместимости - конвертировать строки с разделителем '.' в строки с разделителем ':' при считывании, а затем вызывать функцию проверки на соответствие уже с новым форматом строк.
А можно ещё лучше. Когда UC получает стиль с сервера, то смотрит, есть ли двоеточия в соответствующей строке. Если есть, то строка сохраняется как есть, а если нет - то конвертируется так, как написано выше. Конечно совместимости новых стилей с более ранними версиями UC не будет (хотя у меня есть пара идей, как сделать, чтобы была), но старые стили будут приниматься в новой версии без проблем.

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

Сообщение Max Diesel » Пн сен 20, 2010 1:35 am

Qwertiy писал(а):А можно ещё лучше. Когда UC получает стиль с сервера, то смотрит, есть ли двоеточия в соответствующей строке. Если есть, то строка сохраняется как есть, а если нет - то конвертируется так, как написано выше. Конечно совместимости новых стилей с более ранними версиями UC не будет (хотя у меня есть пара идей, как сделать, чтобы была), но старые стили будут приниматься в новой версии без проблем.
Нет никакой проблемы в восприятии новой версией старых стилей, так как автоматически будет произведена конвертация под новый формат. Проблема лишь в восприятии новых стилей старыми версиями... Если новая версия отправляя стиль на сайт будет переводить его в старый формат (вот только регрессивного конвертера и не хватало), тогда уж старые версии "поймут его правильно", но тогда маски будут принудительно превращены в расширения, которые не всегда превращаются в те же маски после конвертации. Поэтому отложим это мероприятие, возможно позже оно будет как-либо реализовано.

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

Сообщение Qwertiy » Пн сен 20, 2010 5:02 pm

Max Diesel писал(а):Нет никакой проблемы в восприятии новой версией старых стилей, так как автоматически будет произведена конвертация под новый формат. Проблема лишь в восприятии новых стилей старыми версиями...
Старые версии вполне могут обойтись теми расширениями, которые не содержат шаблоных символов... Конвертирование в поисковые запросы лично я считаю ненужным.
Max Diesel писал(а):Если новая версия отправляя стиль на сайт будет переводить его в старый формат (вот только регрессивного конвертера и не хватало), тогда уж старые версии "поймут его правильно", но тогда маски будут принудительно превращены в расширения, которые не всегда превращаются в те же маски после конвертации.
А вот тут не согласен... Старые версии работают по принципу "сравнить расширение с тем, что находится между точками". Соответственно, если между точками будут находиться (в том числе) символы, которые не могут находиться в имени файла, то будет всего лишь тратиться лишнее время на заведомо ложное сравнение. Поэтому просто перед каждой '.' поставим '>', а перед каждым ':' - '.'. И всё - совместимость есть, при этом стили хранятся в старом формате. Вот программа, позволяющая делать любое необходимое конвертирование:

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

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>

using namespace std;

string new_to_old(const string &str)
  {
  string res;
  const char *s;
  
  res.reserve(str.length());
  for(s=str.c_str(); *s; ++s)
    {
    if(*s==':')
      res.push_back('.');
    else if(*s=='.')
      res.push_back('>');
    res.push_back(*s);
    }
  
  if(*res.rbegin()==':')
    res.erase(--res.end());
  
  return res;
  }

string any_to_new(const string &str)
  {
  string res;
  const char *s;

  if(str.length()<3) // incorrect or "::"
    return "::";
  
  if(*(s=str.c_str())==':') // new style
    return str;
  
  if(*s!='.') // incorrect
    return "::";
  
  if(*++s!=':') // old style
    {
    res.reserve(str.length()+1);
    res.push_back(':');
    for(--s; *s; ++s)
      if(*s!='.')   
        res.push_back(*s);
      else if(s[1])
        res+=":*?.";
    }
  else // converted to old style
    {
    res.reserve(str.length()>>1);
    res.push_back(':');
    res.push_back(':');
    *++s=='.' && *++s==':' || --s;
    while(*++s)
      if(*s!='>' && (*s!='.' || s[1] && s[1]!=':'))
          res.push_back(*s);
    }
  
  if(*res.rbegin()!=':')
    res.push_back(':');

  return res;
  }

int main(void)
  {
  string str, res, old;
  
  while(1)
    {
    puts("Enter the string.");
    getline(cin, str);
    printf("                str   == \"%s\"\n",                   str  .c_str());
    printf("(res=any_to_new(str)) == \"%s\"\n",   (res=any_to_new(str)).c_str());
    printf("(old=new_to_old(res)) == \"%s\"\n",   (old=new_to_old(res)).c_str());
    printf("     any_to_new(old)  == \"%s\"\n\n",      any_to_new(old) .c_str());
    }
  
  return 0;
  }
а вот её проверка

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

Enter the string.
.qqq.
                str   == ".qqq."
(res=any_to_new(str)) == "::*?.qqq:"
(old=new_to_old(res)) == ".:.:*?>.qqq."
     any_to_new(old)  == "::*?.qqq:"

Enter the string.
.qqq.www.eee.rrr.
                str   == ".qqq.www.eee.rrr."
(res=any_to_new(str)) == "::*?.qqq:*?.www:*?.eee:*?.rrr:"
(old=new_to_old(res)) == ".:.:*?>.qqq.:*?>.www.:*?>.eee.:*?>.rrr."
     any_to_new(old)  == "::*?.qqq:*?.www:*?.eee:*?.rrr:"

Enter the string.
::*.qqq:
                str   == "::*.qqq:"
(res=any_to_new(str)) == "::*.qqq:"
(old=new_to_old(res)) == ".:.:*>.qqq."
     any_to_new(old)  == "::*.qqq:"

Enter the string.
::*.qqq:*.www.eee:rrr.*:
                str   == "::*.qqq:*.www.eee:rrr.*:"
(res=any_to_new(str)) == "::*.qqq:*.www.eee:rrr.*:"
(old=new_to_old(res)) == ".:.:*>.qqq.:*>.www>.eee.:rrr>.*."
     any_to_new(old)  == "::*.qqq:*.www.eee:rrr.*:"

Enter the string.
Max Diesel писал(а):Поэтому отложим это мероприятие, возможно позже оно будет как-либо реализовано.
Полагаю, теперь нет необходимости откладывать...

PS: Вы никак не прокомментировали найденную мной причину добавления проверки на отсутствие расширения... Эта проверка будет убрана?

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

Сообщение Max Diesel » Вт сен 21, 2010 9:07 am

Qwertiy писал(а):Полагаю, теперь нет необходимости откладывать...
Необходимость все-таки есть... я неслучайно предпочел отложить мероприятие, так как в планах модификация формата хранения визуальных стилей до варианта с учетом фоновых картинок (то есть возможно будет отправить визуальный стиль, заточенный под конкретную фоновую картинку, вместе с этой фоновой картинкой).
Qwertiy писал(а):PS: Вы никак не прокомментировали найденную мной причину добавления проверки на отсутствие расширения... Эта проверка будет убрана?
Будет убрана. Впрочем я не увидел различий по части реакции алгоритма без проверки на файлы без расширений (может быть слишком быстро проверил).

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

Сообщение Qwertiy » Вт сен 21, 2010 9:11 pm

Max Diesel писал(а):Необходимость все-таки есть... я неслучайно предпочел отложить мероприятие, так как в планах модификация формата хранения визуальных стилей до варианта с учетом фоновых картинок (то есть возможно будет отправить визуальный стиль, заточенный под конкретную фоновую картинку, вместе с этой фоновой картинкой).
Тогда уж ещё и со шрифтами...
Кстати, это изменение в ближайших планах или в просто в планах?
Qwertiy писал(а):Будет убрана. Впрочем я не увидел различий по части реакции алгоритма без проверки на файлы без расширений (может быть слишком быстро проверил).
Спасибо.

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

Сообщение Max Diesel » Вт сен 21, 2010 11:13 pm

Qwertiy писал(а):Кстати, это изменение в ближайших планах или в просто в планах?
Как получится...

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

Сообщение Qwertiy » Вт сен 21, 2010 11:30 pm

Max Diesel писал(а):
Qwertiy писал(а):Кстати, это изменение в ближайших планах или в просто в планах?
Как получится...
Если в ближайших билдах не появится, то может стоит добавить предложенный конвертер?

А что насчёт включения нестандартных шрифтов в стили?

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

Сообщение Max Diesel » Вт сен 21, 2010 11:44 pm

Qwertiy писал(а):Если в ближайших билдах не появится, то может стоит добавить предложенный конвертер?
Не вижу смысла делать две модификации вместо одной.
Qwertiy писал(а):А что насчёт включения нестандартных шрифтов в стили?
Несмотря на то, что рациональное зерно в этом есть, тем не менее сомневаюсь что это было бы правильно... проще было бы добавить сервис, который бы следил за запрашиваемыми шрифтами и в случае отсутствия конкретного шрифта подгружал бы его из интернета (вообще непонятно, почему операционная система этого не делает встроенными средствами... если еще не делает).

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

Сообщение Qwertiy » Вт сен 21, 2010 11:59 pm

Max Diesel писал(а):Не вижу смысла делать две модификации вместо одной.
Смысл только в том, что если до изменения с добавлением фонового рисунка пройдёт, например, год или несколько лет, то при добавлении преобразования можно в течении всего этого времени пользоваться масками в окрашивании файлов. Если же формат изменится через 1-2 билда, то смысла конечно нет...
Max Diesel писал(а):
Qwertiy писал(а):А что насчёт включения нестандартных шрифтов в стили?
Несмотря на то, что рациональное зерно в этом есть, тем не менее сомневаюсь что это было бы правильно... проще было бы добавить сервис, который бы следил за запрашиваемыми шрифтами и в случае отсутствия конкретного шрифта подгружал бы его из интернета
Фактически, я это и имел в виду, но в рамках системы стилей в UC... Т. е., если скачивается стиль, шрифтов для которого на компьютере нет, то эти шрифты скачиваются вместе со стилем. При отправке стиля наоборот - шрифты, которые есть в стиле, но отсутствуют на сервере, отправляются вместе с ним. Естественно, хранить одинаковые шрифты для разных стилей в одной связке с ними не имеет смысла.

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

Сообщение Max Diesel » Пт сен 24, 2010 8:04 am

Qwertiy писал(а):Фактически, я это и имел в виду, но в рамках системы стилей в UC... Т. е., если скачивается стиль, шрифтов для которого на компьютере нет, то эти шрифты скачиваются вместе со стилем. При отправке стиля наоборот - шрифты, которые есть в стиле, но отсутствуют на сервере, отправляются вместе с ним. Естественно, хранить одинаковые шрифты для разных стилей в одной связке с ними не имеет смысла.
Шрифты (как ни странно) не всегда являются свободно-распространяемыми, поэтому идея о шрифтах откладывается до момента пока они таковыми не станут.

Ответить