Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Вниз

Списки. Сортировка.   Найти похожие ветки 

 
Vitaliy_____   (2008-10-27 09:38) [0]

Здравствуйте.
Есть набор данных, представляющий 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;


ВОПРОС
Как теперь организовать структуры для сортировки этих данных. Критерий сравнения есть (сравнение "маски" как строки, при равенстве - сравнение числа, возвращаемого ф-ей).  Если можно, то с кодом.


 
brother ©   (2008-10-27 09:40) [1]

> (т.е. не "10, 100, 110, 20, ..." а "10, 20, 30, ..., 100,
> ...").

тебе нужна сортировка по возрастанию?


 
Vitaliy_____   (2008-10-27 11:52) [2]

Да. Мне особо интересует структура как хранить описанное выше. На си бы написал... Можно конечно с динамическими массивами, но мне кажется тут больше подойдут списки. Возможно как-то TList прицепить...


 
brother ©   (2008-10-27 11:54) [3]

> Возможно как-то TList прицепить...

нужно, тогда сортировка вообще проста)


 
Vitaliy_____   (2008-10-27 12:28) [4]

Вот я и прошу синтаксис как это прицепить :)


 
Сергей М. ©   (2008-10-27 13:31) [5]


> Vitaliy_____


Для хранения списка строк очевиднее и удобнее использование класса TStringList, который метод CustomSort


 
Anatoly Podgoretsky ©   (2008-10-27 15:19) [6]

> Vitaliy_____  (27.10.2008 12:28:04)  [4]

Смотри в справке метод Sort



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
15-1223242931
обана!
2008-10-06 01:42
2008.12.07
А было бы нефигово


2-1225290334
ViToTiV
2008-10-29 17:25
2008.12.07
Обработка исключений в сервисе


15-1223143297
Cyrax
2008-10-04 22:01
2008.12.07
Устанавливают ли срок службы на сотовые телефоны ?


15-1222949899
Vlad Oshin
2008-10-02 16:18
2008.12.07
У нас пропадают ветки с сообщениями!


2-1225171109
Fynjy84
2008-10-28 08:18
2008.12.07
TDBLookupComboBox открыть список сверху от эдита





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский