Главная страница
    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.01 c
1-93881
Nikulin
2004-02-16 09:54
2004.02.29
Как реализовать сортировку в ListView по клику на заголовке?


1-93955
Anton
2004-02-17 11:46
2004.02.29
Как загрузить и сохранить значения переменных из файла в файл?


1-93978
HF-Trade
2004-02-17 12:57
2004.02.29
После Append текст теряет формат...


14-94145
127.0.0.1
2004-02-08 17:20
2004.02.29
Посмотри и улыбнись ;)


1-93995
Di
2004-02-18 16:54
2004.02.29
QReport не находит свойство Extended.Duplex





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