![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Привет! Подскажите, как сделать сортировку таблицы. Я вот написал, но что-то не работает.
procedure TForm2.Button9Click(Sender: TObject); Var k,a,b,c,d,e,v,x,k1,a1,b1,c1,d1,e1,v1,x1,k2,a2,b2,c 2,d2,e2,v2,x2:string; begin with StringGrid1 do begin if Cells[7,1]<Cells[7,2] then begin k:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k; a:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a; b:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b; c:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c; d:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d; e:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e; v:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v; x:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x; end; if Cells[7,2]<Cells[7,3] then begin k1:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k1; a1:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a1; b1:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b1; c1:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c1; d1:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d1; e1:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e1; v1:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v1; x1:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x1; if Cells[7,1]<Cells[7,3] then begin k2:=Cells[0,2]; Cells[0,2]:=Cells[0,1]; Cells[0,1]:=k2; a2:=Cells[1,2]; Cells[1,2]:=Cells[1,1]; Cells[1,1]:=a2; b2:=Cells[2,2]; Cells[2,2]:=Cells[2,1]; Cells[2,1]:=b2; c2:=Cells[3,2]; Cells[3,2]:=Cells[3,1]; Cells[3,1]:=c2; d2:=Cells[4,2]; Cells[4,2]:=Cells[4,1]; Cells[4,1]:=d2; e2:=Cells[5,2]; Cells[5,2]:=Cells[5,1]; Cells[5,1]:=e2; v2:=Cells[6,2]; Cells[6,2]:=Cells[6,1]; Cells[6,1]:=v2; x2:=Cells[7,2]; Cells[7,2]:=Cells[7,1]; Cells[7,1]:=x2; end; end; end; end; |
|
#2
|
|||
|
|||
|
Ну чего, никто не знает что ли???
|
|
#3
|
|||
|
|||
|
Я не понял вопрос. Алгоритмов сортировки в Интернете тьма. Давай уточним, как именно ты хочешь сортировать?
1) Отсортировать записи по одному из полей; 2) Отсортировать колонки по имени; 4) Отсортировать все ячейки по вертикали; 5) Отсортировать все ячейки по горизонтали; 6) Отсортировать все ячейки по диагонали (своеобразная комбинация 4 и 5). Зачем это нужно в твоем случае? |
|
#4
|
|||
|
|||
|
Смотри. Если StringCells[6,1]<StringCells[6,2], то мне нужно поменять их местами, а также строки, в которых находятся StringCells[6,1] и StringCells[6,2] соответственно. Потом их надо сравнить с StringCells[6,3].
Надеюсь понял. |
|
#5
|
|||
|
|||
|
Вот набросал.
Принимает: StringGrid - грид типа TStringGrid с данными; RowIndx - номер строки, по которой выполнять сортировку; StartCol - номер столбца, с которого начинается сортировка; StopCol - номер столбца, на котором окончить сортировку; Необходимо добавить проверки принимаемых значений и подумать о перестановке столбцов разом возможно через TStrings. Код:
procedure Sort(var StringGrid: TStringGrid; RowIndx: Integer;
StartCol, StopCol: Integer);
var
Interval: Integer;
i, j: Integer;
Moved: Boolean; // пpизнак пеpестановки
Str: AnsiString;
begin
if StartCol > StopCol then
Exit;
// начальное значение интеpвала
Interval := (StopCol - StartCol) div 2;
// цикл с yменьшением интеpвала до 1
while Interval > 0 do
begin
// пyзыpьковая соpтиpовка с интеpвалом
// цикл, пока есть пеpестановки
Moved := True;
while Moved do
begin
Moved := False;
for i := StartCol to StopCol - (1 + Interval) do
begin
if AnsiCompareText(StringGrid.Cells[i, RowIndx],
StringGrid.Cells[i+Interval, RowIndx]) > 0 then
begin
// пеpестановка
for j := 0 to StringGrid.RowCount - 1 do
begin
Str := StringGrid.Cells[i, j];
StringGrid.Cells[i, j] := StringGrid.Cells[i+Interval, j];
StringGrid.Cells[i+Interval, j] := Str;
end;
// пpизнак пеpестановки
Moved := True;
end;
end;
end;
// yменьшение интеpвала
Interval := Interval div 2;
end;
end; |
|
#6
|
|||
|
|||
|
Спасибо! Но, если честно, то я мало чего понял!?
|