Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Сортировка файлов
destroy
Вставить ник
сообщение 27:04:2008, 13:39
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 8
Регистрация: 17:03:2008
Пользователь №: 15 943



Репутация: - 0 +


У меня в программе пользователь выберает директорию и все файла добавляются в Memo.
Хочу сделать сортировочку. Тоесть чтобы можно было сортировать по названию, расширению, размеру.
Подскажите как это сделать?

Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 11)
sax_ol
Вставить ник
сообщение 28:04:2008, 05:44
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Написать соответствующий код, или нет?
Подняться вверх 
 
Сообщение #2
destroy
Вставить ник
сообщение 28:04:2008, 10:39
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 8
Регистрация: 17:03:2008
Пользователь №: 15 943



Репутация: - 0 +


Получаю список файлов так:

Код
procedure FindFilesByMask(List :tStrings; var DirCount :Integer; const DirName, Mask :String; SubDir: Boolean = True);

  procedure ScanDirs(const DirName :String);
  var
    h   :tHandle;
    wfd :tWin32FindData;
    sfo :string;
    n :integer;
    SearchRec2 :TSearchRec;
    


  begin
    Inc(DirCount);

    h := Windows.FindFirstFile(PChar(DirName+Mask), wfd);

    end;

    try
      if  h <> INVALID_HANDLE_VALUE  then begin
        repeat
          if  (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0  then
            List.Add(DirName+wfd.cFileName);
        until  not Windows.FindNextFile(h,wfd);
      end;

      case  GetLastError  of
        ERROR_NO_MORE_FILES,    // больше нет файлов и каталогов удовлетворяющих маске (но были)
        ERROR_FILE_NOT_FOUND,   // вообще нет файлов и каталогов удовлетворяющих маске
        ERROR_SHARING_VIOLATION // возникает во время создания каталога (уже создан но еще недоступен)
                              :; // ничего не делаем, все Ok
        else // все остальные ошибки
          raise Exception.CreateFmt('Ошибка просмотра каталога "%s": %s',[DirName,SysErrorMessage(GetLastError)]);
      end;
    finally
      if  h <> INVALID_HANDLE_VALUE  then Windows.FindClose(h);
    end;

    // Теперь рекрсивно просмотрим подкаталоги
    if not SubDir then exit;
    h := Windows.FindFirstFile(PChar(DirName+'*.*'), wfd);
    try
      if  h <> INVALID_HANDLE_VALUE  then begin
      
        repeat
          if   ((wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0)
           and (wfd.cFileName <> String('.'))
           and (wfd.cFileName <> '..')           then
            ScanDirs(IncludeTrailingPathDelimiter(DirName+wfd.cFileName));
        until  not Windows.FindNextFile(h,wfd);
      end;

      case  GetLastError  of
        ERROR_NO_MORE_FILES,    // больше нет файлов и каталогов удовлетворяющих маске (но были)
        ERROR_FILE_NOT_FOUND,   // вообще нет файлов и каталогов удовлетворяющих маске
        ERROR_SHARING_VIOLATION // возникает во время создания каталога (уже создан но еще недоступен)
                              :; // ничего не делаем, все Ok
        else // все остальные ошибки
          raise Exception.CreateFmt('Ошибка просмотра каталога "%s": %s',[DirName,SysErrorMessage(GetLastError)]);
      end;
    finally
      if  h <> INVALID_HANDLE_VALUE  then Windows.FindClose(h);
    end;
  end;

begin // FindFilesByMask
  ScanDirs(IncludeTrailingPathDelimiter(DirName));
end;


Можно было бы конечно записать список файлов в массив и отсортировать.
Просто интересно, можно ли сделать это по другому.
Подняться вверх 
 
Сообщение #3
sax_ol
Вставить ник
сообщение 28:04:2008, 11:28
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Закидывайте данные в TStringList, его сорттируйте, а на выходе Assign в destination. Так вот первое что пришло.
Подняться вверх 
 
Сообщение #4
destroy
Вставить ник
сообщение 28:04:2008, 14:00
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 8
Регистрация: 17:03:2008
Пользователь №: 15 943



Репутация: - 0 +


sax_ol, я так тоже делал.

Но все ни так просто у меня.
Код который я привел не совсем полный так сказать...

Принцип такой:
Если найдена папка, название ее добавляется в memo
И после того как все имена файлов, которые находятся в этой папке добавлены в memo,
добавляется опять строчка с название этой папки.

Например:

video
c:\video\1.avi
c:\video\2.avi
c:\video\3.avi
video

music
c:\music\1.mp3
c:\music\2.mp3
...

А когда я закидываю в TStringList
у меня есессно все сбивается.

Думал может есть какая ф-я для сортировки при поиске файлов...
Подняться вверх 
 
Сообщение #5
sax_ol
Вставить ник
сообщение 28:04:2008, 14:15
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Почему m позже v ?
Подняться вверх 
 
Сообщение #6
destroy
Вставить ник
сообщение 28:04:2008, 14:38
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 8
Регистрация: 17:03:2008
Пользователь №: 15 943



Репутация: - 0 +


Цитата
Почему m позже v ?

Да это я так для примера привел.
Подняться вверх 
 
Сообщение #7
sax_ol
Вставить ник
сообщение 28:04:2008, 15:05
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Вы для примера (неправильного), условия меняете от топика к топику, а люди при этом думают, стараются помочь ... оч. некрасиво.
Подняться вверх 
 
Сообщение #8
destroy
Вставить ник
сообщение 28:04:2008, 15:13
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 8
Регистрация: 17:03:2008
Пользователь №: 15 943



Репутация: - 0 +


да я просто пример привел как я получаю список файлов.
Тоесть в начале название папки потом файлы потом опять название папки.
и вопрос просто как отсортировать все это и чтобы сохранилась структура.

Это Вы что то путаете.
Подняться вверх 
 
Сообщение #9
sax_ol
Вставить ник
сообщение 28:04:2008, 15:41
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(destroy @ 28:04:2008 - 17:13) *
Это Вы что то путаете.
Я ничего не путаю, я смотрю на первый пост и сравниваю с последующими, и вижу что условия меняются постоянно, а это не хорошо.
Надо вам учиться правильно формулировать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Подняться вверх 
 
Сообщение #10
destroy
Вставить ник
сообщение 28:04:2008, 16:07
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 8
Регистрация: 17:03:2008
Пользователь №: 15 943



Репутация: - 0 +


Вопрос закрыт. Сделал.

Цитата
я смотрю на первый пост и сравниваю с последующими

читать надо, а не смотреть.

В 5 сообщение я расписал подробно что хотел.
Подняться вверх 
 
Сообщение #11
sax_ol
Вставить ник
сообщение 28:04:2008, 16:40
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Нафик читать всякую ерунду.
Подняться вверх 
 
Сообщение #12


Закрыто  Новая тема 

 

RSS Текстовая версия Сейчас: 17:05:2008 - 05:11
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net