Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2012, 20:44   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию Сортировка по дате ((((

Приветствую. Есть txt файл с содержимым
Код:
halloween_85 ( 243 ) SELLER 12.11.12 21:04
adam ( 2731 ) SELLER 18.07.12 19:07
sara ( 10 ) SELLER 10.10.12 07:12
nicol ( 563 ) SELLER 14.11.12 04:06
jams ( 6095 ) SELLER 11.10.11 22:04
Требуется отсортировать строки по дате (от большей к меньшей). Как можно такое реализовать? Может есть готовые варианты?
bakanaev вне форума Ответить с цитированием
Старый 14.11.2012, 20:50   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от bakanaev Посмотреть сообщение
Приветствую. Есть txt файл с содержимым
Код:
halloween_85 ( 243 ) SELLER 12.11.12 21:04
adam ( 2731 ) SELLER 18.07.12 19:07
sara ( 10 ) SELLER 10.10.12 07:12
nicol ( 563 ) SELLER 14.11.12 04:06
jams ( 6095 ) SELLER 11.10.11 22:04
Требуется отсортировать строки по дате (от большей к меньшей). Как можно такое реализовать? Может есть готовые варианты?
Это как сказать. Ведь сначала надо этот файл прочитать, потом выделить из общей строки дату и отсортировывать. Ваще это возможно.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 14.11.2012, 22:19   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

по сути Саша прав.
Берите TStringList, грузите весь свой текстовый файл в этот объект методом LOadFromFile,
сортируйте строки (любым удобным методом, например, обменами).
Сохраняйте полученный список методом SaveToFile

профит.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2012, 08:44   #4
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
сортируйте строки (любым удобным методом, например, обменами).
А что за обмены?

Последний раз редактировалось bakanaev; 15.11.2012 в 08:53.
bakanaev вне форума Ответить с цитированием
Старый 15.11.2012, 09:35   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

[url=http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8 B_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1 %80%D0%BE%D0%B2%D0%BA%D0%B8#.D0.A1. D0.BF.D0.B8.D1.81.D0.BE.D0.BA_.D0.B 0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1. 82.D0.BC.D0.BE.D0.B2_.D1.81.D0.BE.D 1.80.D1.82.D0.B8.D1.80.D0.BE.D0.B2. D0.BA.D0.B8]Алгоритм сортировки (Список алгоритмов сортировки)

я имел в виду простейшим метод сортировки Сортировка пузырьком:
Цитата:
Сортировка пузырьком
[править]
Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Сортировка простыми обменами, сортиро́вка пузырько́м (англ. bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Сложность алгоритма: O(n²).

Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяются более эффективные алгоритмы сортировки. В то же время метод сортировки обменами лежит в основе некоторых более совершенных алгоритмов, таких как шейкерная сортировка, пирамидальная сортировка и быстрая сортировка.
А там уже смотрите сами, какой метод сортировки Вам больше подходит..

применительно к данному вопросу и TStringList, Вам нужно написать функцию, которая возвращает ДАТУ (или, хотя бы строчку вида YYYYMMDD) из строки (методом парсинга строки, выделения даты)
дальше пишете примерно так:
Код:
program SortTStringList;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

function GetDateFromStr(s : string): string;  // внимание: это просто заглушка для примера работы!
begin
  Result := copy(s,5,4);
end;
var TS : TStringList;
 i,j : integer;
begin
  TS := TStringList.Create;
  TS.Append('ddd 2012 ddd ');
  TS.Append('zzz 2010 ddd ');
  TS.Append('azz 2011 aadsdsad d ');

  {sort list}
  for i:=0 to TS.Count-2 do
    for j:=i+1 to TS.Count-1 do
      if GetDateFromStr(TS.Strings[i])< GetDateFromStr(TS.Strings[j]) then
         TS.Exchange(i,j);

  for I := 0 to TS.Count - 1 do
     WriteLn(TS.Strings[i]);
  Readln;
  FreeAndNil(TS);
end.
собственно сортировку в коде я выделил

всё. список отсортирован!

Последний раз редактировалось Serge_Bliznykov; 15.11.2012 в 09:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2012, 09:40   #6
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

А, вон вы про что)) Ну я в университете проходил этот метод)) Давно конечно было. Спасибо что напомнили)!
bakanaev вне форума Ответить с цитированием
Старый 15.11.2012, 09:46   #7
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

А вот еще простенький вариант (сортировку отдаем TStrings):
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  SL1, SL2, SLD : TStringList;
  I, K, L : Integer;
begin
  SL1 := TStringList.Create;  //исходные строки
  SL2 := TStringList.Create;  //отсортированные строки
  SLD := TStringList.Create;  //даты для сортировки
  try
//    SL1.LoadFromFile(<имя исходного файла>);  //загрузка исходного файла
    SL1.Assign(Memo1.Lines);  //в этом примере загрузка из мемо
    SLD.Sorted := True;

    L := Length('SELLER ');
    //извлечение даты из строк
    for I := 0 to SL1.Count-1 do begin
      K := Pos('SELLER', SL1[I]);
      if K = 0 then continue;
      SLD.AddObject(Copy(SL1[I], K+L+6, 2)+Copy(SL1[I], K+L+3, 2)+Copy(SL1[I], K+L, 2),
                    TObject(I))
    end;

    for I := 0 to SL1.Count-1 do begin
      SL2.Add(SL1[Integer(SLD.Objects[I])]);
    end;
    Memo2.Lines.Assign(SL2);  //в примере отсортированные строки смотрим в мемо
//    SL2.SaveToFile(<имя файла>);
  finally
    SLD.Free;
    SL1.Free;
    SL2.Free;
  end;
end;
Работоспособный
Прик вне форума Ответить с цитированием
Старый 15.11.2012, 10:14   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Прик, ну да, +1!

единственное, я бы Sorted := true не делал, а вызвал метод .Sort после добавления всех необходимых данных.
Мне кажется (возможно, ошибочно!) что так будет быстрее, чем заставлять при добавлении каждого объекта сортировать список..

Последний раз редактировалось Serge_Bliznykov; 15.11.2012 в 10:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.06.2019, 08:15   #9
0987
Новичок
Джуниор
 
Регистрация: 03.10.2013
Сообщений: 2
По умолчанию

в последнем варианте будет ошибка, если в SLD даты для сортировки окажутся одинаковыми, к примеру совпадут в разных строках. Устранить ошибку поможет перенос строки: SLD.Sorted := True; в место после цикла создания объектов:
SLD.AddObject.......
end;
0987 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по дате Farrel SQL, базы данных 2 06.05.2011 17:05
Сортировка по Дате amator_roma БД в Delphi 1 12.11.2010 13:44
Сортировка по дате Lerein Microsoft Office Access 1 25.09.2010 20:10
Сортировка БД по дате создания NuR1k БД в Delphi 7 24.08.2010 15:06
Сортировка по дате. TheForever БД в Delphi 2 23.03.2010 19:54

Реклама для незарегистрированных, регистрация на форуме