![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Списки. Сортировка. [D7, XP]
Vitaliy_____ © (2008-10-27 09:38:00)Здравствуйте.
Есть набор данных, представляющий 3 списка строк.
Один из этих списков содержит имена файлов, представляющих из себя следующее: МаскаГруппы_НомерИтерации.Расширение
Два других списка - прочитанные из этих файлом параметры.
Необходимо отсортировать эти списки по имени файла.
Проблема в том, что НомерИтерации - число, приписанное к имени, нужно отсортировать именно как число (т.е. не "10, 100, 110, 20, ..." а "10, 20, 30, ..., 100, ...").
Функцию извлечения номера из строки я написал так:
Const nullval=ord('0');
Const nineval=ord('9');
function GetLastNumberInFileName(const fn:string; var NumberStartPos:integer):integer;
var i,l:integer;
b:byte;
k:boolean;
begin
l:= length(fn);
i:=l; k:=false;
// 1. Поиск конца числа
while (k=false) and (i>0) do begin
b:=ord(fn[i]);
if (b>=nullval) and (b<=nineval) then
k:=true
else
dec(i);
end;
if i=0 then begin // Числа не найдено
result:=-1;
exit;
end;
NumberStartPos:=i-1; k:=false;
// 2. Поиск начала числа
while (k=false) and (NumberStartPos>0) do begin
b:=ord(fn[NumberStartPos]);
if (b<nullval) or (b>nineval) then
k:=true
else
dec(NumberStartPos);
end;
result:=strtoint(copy(fn,NumberStartPos+1,i-NumberStartPos));
end;
ВОПРОС
Как теперь организовать структуры для сортировки этих данных. Критерий сравнения есть (сравнение "маски" как строки, при равенстве - сравнение числа, возвращаемого ф-ей). Если можно, то с кодом.
Anatoly Podgoretsky (2008-10-27 15:19:00) [1]> Vitaliy_____ (27.10.2008 12:28:04) [4]
Смотри в справке метод Sort
Сергей М. (2008-10-27 13:31:00) [2]
> Vitaliy_____
Для хранения списка строк очевиднее и удобнее использование класса TStringList, который метод CustomSort
Vitaliy_____ (2008-10-27 12:28:00) [3]Вот я и прошу синтаксис как это прицепить :)
brother (2008-10-27 11:54:00) [4]> Возможно как-то TList прицепить...
нужно, тогда сортировка вообще проста)
Vitaliy_____ (2008-10-27 11:52:00) [5]Да. Мне особо интересует структура как хранить описанное выше. На си бы написал... Можно конечно с динамическими массивами, но мне кажется тут больше подойдут списки. Возможно как-то TList прицепить...
brother (2008-10-27 09:40:00) [6]> (т.е. не "10, 100, 110, 20, ..." а "10, 20, 30, ..., 100,
> ...").
тебе нужна сортировка по возрастанию?