Главная страница
    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
1-93853
Plt
2004-02-16 17:18
2004.02.29
Высота Popup


1-93948
morev_s_a
2004-02-17 18:19
2004.02.29
Как напечатать несколько графиков на одной странице?


3-93793
Sergvc
2004-02-03 16:06
2004.02.29
список баз в SQL Server


1-93958
Alex_DM
2004-02-16 17:37
2004.02.29
Проблемы при динамическом создании WebBrowser. Помогите!


1-94012
heady
2004-02-16 17:49
2004.02.29
Активная ссылка





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