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

Вниз

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

 
SHS   (2004-02-17 09:27) [0]

В Memo загружаю текстовый файл, каждая строка которого начинается с даты и выглядит примерно так: "15.01 Здесь любой текст". Мне нужно отсортировать эти строки в Memo по датам. Примерно знаю, что первые пять символов строки нужно преобразовать в тип TDate и потом сравнивать с другими строками, но практически никак сделать не получается, если кто-нибудь поможет конкретным примером, буду очень благодарен.


 
ЮЮ   (2004-02-17 09:39) [1]

Преобразовать в "01.15 Здесь любой текст" и засунуть в StringList c Sorted = true. В конце получаем отсортированный список строк, делаем Assign и ... всё


 
ЮЮ   (2004-02-17 09:40) [2]

>в Memo загружаю текстовый файл

загружай в StringList в отключенной сортировкой, преобразуй, сделай сортировку


 
kostik78ua   (2004-02-17 09:46) [3]

Например что-то типа такого:
procedure TForm1.Button1Click(Sender: TObject);
var
st: TStringlist;
begin
st := TStringlist.Create;
try
st.CommaText := Memo1.Lines.CommaText;
st.Sorted := True;
Memo1.Lines.CommaText := st.CommaText;
finally
FreeAndNil(st);
end;
end;
Или использовать st.Sort


 
SHS   (2004-02-17 09:53) [4]

To ЮЮ ©: Со StringList я пробовал, там получалось так:
10.02 ...
10.03 ...
10.04 ...
11.01 ...
11.02 ...
11.03 ...
т.е даты шли правильно, а вот месяца нет.

To kostik78ua:
Сейчас попробую.


 
SHS   (2004-02-17 10:02) [5]

To kostik78ua: сортируется только по дате, без учёта месяца...


 
mrcat   (2004-02-17 10:08) [6]

>SHS (17.02.04 09:53) [4]
>т.е даты шли правильно, а вот месяца нет.

ЮЮ © (17.02.04 09:39) [1]
Преобразовать в " 01.15 Здесь любой текст"


 
Babay   (2004-02-17 10:14) [7]

1) заводим например запись
Type TmDateText=Record;
date:TDate;
Text:String;
end;
2) Заводим динамический массив типа TmDateText
3) Читаем в стринглист файл
4) Перекладываем из стринглист в массив с разборкой соответственно даты и строки
5) Сортируем массив по Date используя ее как Double
6) Вываливаем из массива в мемо с обратным преобразованиее даты и строки
по идее должно работать


 
FOX   (2004-02-17 12:46) [8]

Один из возможных вариантов:

function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
var d1, d2: TDate;
begin
d1 := EncodeDate( 1,
StrToInt(copy(List[Index1], 4, 2)),
StrToInt(copy(List[Index1], 1, 2)));
d2 := EncodeDate( 1,
StrToInt(copy(List[Index2], 4, 2)),
StrToInt(copy(List[Index2], 1, 2)));
if d1 < d2 then result := -1
else
if d1 > d2 then result := 1
else result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var r: TStringList;
begin
r := TStringList.Create;
try
r.Assign(Memo1.Lines);
r.CustomSort(@MyCompare);
Memo1.Lines.Assign(r);
finally
r.Free;
end;
end;


 
SHS   (2004-02-17 13:13) [9]

Спасибо всем ОГРОМНОЕ за помощь!

Метод предложенный ЮЮ © конечно работает:
Преобразовать в "mm.dd Здесь любой текст"
(в оригинале "dd.mm Здесь любой текст"), спасибо mrcat ©, что заострил моё внимание на этом.

Ещё раз ВСЕМ Большое спасибо, ещё вариант FOX © сейчас обязательно попробую.



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

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

Наверх





Память: 0.46 MB
Время: 0.009 c
3-93778
John S.
2004-02-04 08:01
2004.02.29
AdoCommand


4-94230
DelphiN!
2003-12-20 20:34
2004.02.29
Как послать сообщение открытому в данный момент окну


8-94035
Elic
2003-10-28 10:54
2004.02.29
компонент для отображения GIF,JPG,BMP,PCX


14-94131
Думкин
2004-02-07 06:28
2004.02.29
С днем рождения! 7 февраля.


14-94125
Домарощинер
2004-02-08 15:45
2004.02.29
Apache+PHP+MySQL on Win2k:download & setup





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский