Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2013, 14:04   #1
Sadist666
 
Регистрация: 21.03.2013
Сообщений: 5
По умолчанию Сортировка по дате в Memo

Добрый вечер. Никак не могу сделать сортировку по дате в мемо...
Вообщем есть файл из которого считываются даты поступления материалов, например:
10.01.2012
03.04.2013
и т.д.
мне надо что бы при нажатии на кнопку все выведенные в мемо даты отсортировались по дате. я нашёл какой-то алгоритм, но он сортирует по алфавиту. может подскажете какой-нибудь алгоритм или помогите пожалуйста изменить уже имеющийся
Код:
procedure TForm3.SpeedButton1Click(Sender: TObject);
var i,x: integer;
begin
for i := 0 to (Memo2.Lines.Count - 1) do
     for x := 0 to (Memo2.Lines.Count - 1) do
       if (Memo2.Lines[x] < Memo2.Lines[i]) and (x > i) then
       begin
         Memo2.Lines.Insert(i, Memo2.Lines[x]);
         Memo2.Lines.Delete(x + 1);
       end;
end;

Последний раз редактировалось Stilet; 01.05.2013 в 17:30.
Sadist666 вне форума Ответить с цитированием
Старый 01.05.2013, 14:46   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Возможно, можно проще:
Код:
function mycomp(const S1, S2: string): Integer;
const
  ind: array [1 .. 8] of Integer = (7, 8, 9, 10, 4, 5, 1, 2);
var
  i: Integer;
begin
  for i := 1 to 8 do
    if S1[ind[i]] <> S2[ind[i]] then
    begin
      result := -ord(S1[ind[i]] < S2[ind[i]]) + ord(S1[ind[i]] > S2[ind[i]]);
      exit;
    end;
  result := 0;
end;

function StringListCompareStrings(List: TStringList;
  Index1, Index2: Integer): Integer;
begin
  result := mycomp(List[Index1], List[Index2]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ts: TStringList;
begin
  ts := TStringList.Create;
  ts.Text := Memo1.Text;
  ts.CustomSort(StringListCompareStrings);
  Memo1.Text := ts.Text;
  freeandnil(ts);
end;
Выигрыш должен быть на большом количестве дат.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.05.2013, 14:52   #3
Sadist666
 
Регистрация: 21.03.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Возможно, можно проще:
Код:
function mycomp(const S1, S2: string): Integer;
const
  ind: array [1 .. 8] of Integer = (7, 8, 9, 10, 4, 5, 1, 2);
var
  i: Integer;
begin
  for i := 1 to 8 do
    if S1[ind[i]] <> S2[ind[i]] then
    begin
      result := -ord(S1[ind[i]] < S2[ind[i]]) + ord(S1[ind[i]] > S2[ind[i]]);
      exit;
    end;
  result := 0;
end;

function StringListCompareStrings(List: TStringList;
  Index1, Index2: Integer): Integer;
begin
  result := mycomp(List[Index1], List[Index2]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ts: TStringList;
begin
  ts := TStringList.Create;
  ts.Text := Memo1.Text;
  ts.CustomSort(StringListCompareStrings);
  Memo1.Text := ts.Text;
  freeandnil(ts);
end;
Выигрыш должен быть на большом количестве дат.
спасибо большое! Вы бы не могли подставить это к моему коду. спасибо заранее!
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, Buttons, StdCtrls;

type
  TForm3 = class(TForm)
    Image1: TImage;
    ComboBox3: TComboBox;
    Memo2: TMemo;
    BitBtn1: TBitBtn;
    SpeedButton2: TSpeedButton;
    SpeedButton1: TSpeedButton;
    procedure ComboBox3Change(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.ComboBox3Change(Sender: TObject);
begin
if combobox3.itemindex=0 then memo2.lines.loadfromfile('Ðåàëèçàöèÿ\Àè-91.txt');
if combobox3.itemindex=1 then memo2.lines.loadfromfile('Ðåàëèçàöèÿ\Àè-92.txt');
if combobox3.itemindex=2 then memo2.lines.loadfromfile('Ðåàëèçàöèÿ\Àè-95.txt');
if combobox3.itemindex=3 then memo2.lines.loadfromfile('Ðåàëèçàöèÿ\Àè-98.txt');
if combobox3.itemindex=4 then memo2.lines.loadfromfile('Ðåàëèçàöèÿ\Äèçåëüíîå òîïëèâî.txt');
if combobox3.itemindex=5 then memo2.lines.loadfromfile('Ðåàëèçàöèÿ\Ìîòîðíûå ìàñëà.txt');
end;

procedure TForm3.BitBtn1Click(Sender: TObject);
begin
if combobox3.itemindex=0 then memo2.lines.Savetofile('Ðåàëèçàöèÿ\Àè-91.txt');
if combobox3.itemindex=1 then memo2.lines.Savetofile('Ðåàëèçàöèÿ\Àè-92.txt');
if combobox3.itemindex=2 then memo2.lines.Savetofile('Ðåàëèçàöèÿ\Àè-95.txt');
if combobox3.itemindex=3 then memo2.lines.Savetofile('Ðåàëèçàöèÿ\Àè-98.txt');
if combobox3.itemindex=4 then memo2.lines.Savetofile('Ðåàëèçàöèÿ\Äèçåëüíîå òîïëèâî.txt');
if combobox3.itemindex=5 then memo2.lines.Savetofile('Ðåàëèçàöèÿ\Ìîòîðíûå ìàñëà.txt');
end;

procedure TForm3.SpeedButton2Click(Sender: TObject);
begin
Close;
end;

procedure TForm3.SpeedButton1Click(Sender: TObject);
var i,x: integer;
begin
for i := 0 to (Memo2.Lines.Count - 1) do
     for x := 0 to (Memo2.Lines.Count - 1) do
       if (Memo2.Lines[x] < Memo2.Lines[i]) and (x > i) then
       begin
         Memo2.Lines.Insert(i, Memo2.Lines[x]);
         Memo2.Lines.Delete(x + 1);
       end;
end;

end.

Последний раз редактировалось Stilet; 01.05.2013 в 17:30.
Sadist666 вне форума Ответить с цитированием
Старый 01.05.2013, 14:56   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Замените код в procedure TForm3.SpeedButton1Click(Sender: TObject); на код из моей procedure TForm1.Button1Click(Sender: TObject);, а функции function mycomp(const S1, S2: string): Integer; и function StringListCompareStrings(List: TStringList; просто скопируйте и поместите выше процедуры TForm3.SpeedButton1Click(Sender: TObject);.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по дате (((( bakanaev Общие вопросы Delphi 8 02.06.2019 08:15
Сортировка по дате Farrel SQL, базы данных 2 06.05.2011 18:05
Сортировка по Дате amator_roma БД в Delphi 1 12.11.2010 13:44
Сортировка по дате Lerein Microsoft Office Access 1 25.09.2010 21:10
Сортировка по дате. TheForever БД в Delphi 2 23.03.2010 19:54