Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сформировать список


Страницы:   1 2

NieL ©   (2011-02-02 15:06:00) 

в каталоге помимо прочих файлов, хранятся файлы в формате test1.txt, test6.txt, test11.txt test24.txt, ... Нужно сформировать список имен файлов в таком формате и отсортировать его по целочисленному значению в имени файла. Как грамотнее сделать:

[1-й вариант]: сортировать после сформированный список

1. FindFirst/FindNext формируем TStringList
2. Пишем функцию сортировки (MySortProc)
3. Вызываем TStringList.CustomSort(MySortProc)

[2-й вариант]: сортировать на момент формирования списка

Как лучше?


Anatoly Podgoretsky   (2011-02-02 22:56:00) [21]

> Ega23  (02.02.2011 22:28:09)  [9]

Это нормально когда известно сколько и когда калькулятор есть.


Ega23   (2011-02-02 22:28:00) [22]


> 0000022
> 2000000

Ну и чо, нормально. Как раз.


Anatoly Podgoretsky   (2011-02-02 22:18:00) [23]

> NieL  (02.02.2011 15:06:00)  [0]

Как угодно, результат одинаковый, лишь бы правильно.


Anatoly Podgoretsky   (2011-02-02 22:17:00) [24]

> Ega23  (02.02.2011 15:11:03)  [3]

0000022
2000000


Ega23   (2011-02-02 15:33:00) [25]


>  отсортировать готовый список - то быстрее, чем пересортировывать
> список при каждой вставке,

Ой-ли?


KSergey   (2011-02-02 15:30:00) [26]

Первый вариант правильнее.
Во-первых, логика и код сортировки будет в явном виде отвязан от получения списка, между ними будет универсальный интерфейс в виде TStringList, т.е. легче отлаживать и переиспользовать части кода, во-вторых, отсортировать готовый список - то быстрее, чем пересортировывать список при каждой вставке, либо придется хранить его сразу в таком контейнере, чтобы вставка шла быстро в нужное место.


niel   (2011-02-02 15:28:00) [27]

вот набросал если делать по варианту 2:
И еще: мне переодически нужно будет сравнивать значения в именах файла, можем стоит сделать целочисленный список для удобства, а когда необходимо полное имя файла, только добавлять приставку 'test' и окончание '.txt'.


procedure TForm1.Button1Click(Sender: TObject);
var
 find_data: WIN32_FIND_DATA;
 hFind: Cardinal;
 X, N: Integer;
 Prepared: TList<Integer>;
begin
 Prepared := TList<Integer>.Create(
   TComparer<Integer>.Construct(

     function (const AVal1, AVal2: Integer): Integer
     begin
       Result := CompareValue(AVal1, AVal2);

     end

   ));
 try
   hFind := FindFirstFile(PChar(Fwork_dir + 'test*.txt'), find_data);
   if hFind <> INVALID_HANDLE_VALUE then
     try
       repeat
         get_num(find_data.cFileName, X);
         Prepared.BinarySearch(X, N);
         Prepared.Insert(N, X);
     until
       not FindNextFile(hFind, find_data);
   finally
     FindClose(hFind);
   end;
   // ... что-то делаем
 finally
   Prepared.Free;
 end;

end;


Ega23   (2011-02-02 15:11:00) [28]


> на момент test11 будет перед test2

Ну дык. Надо же с нуля начинать. 01, 02, ..., 09, 10, 11, 12, ...
тогда всё нормуль будет.


Ega23   (2011-02-02 15:09:00) [29]


> Как лучше?

От задачи зависит. Тупо, дёшево и в лоб - 1-й вариант.


Игорь Шевченко   (2011-02-02 15:09:00) [30]

сортировать сформированный. на момент test11 будет перед test2


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо