Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.20;
Скачать: CL | DM;

Вниз

Хай мастера! У меня вопрос по сортировке!   Найти похожие ветки 

 
[BAD]Angel   (2002-06-09 14:46) [0]

Есть StringGrid с несколькими строками... надо отсортировать их по возрастанию и записать в INI файл. Как бы это сделать? Если можно то программным кодом! ;-) Очень надо, ГОРЮ!

Заранее спасибо!


 
777   (2002-06-09 14:51) [1]

ручками.
или из StringGrid в какойнибудь листбокс, который
имеет св-во сортировки а потом обратно
:)


 
[BAD]Angel   (2002-06-09 15:01) [2]

procedure TForm1.Sort;
var
buf, buf1: String;
begin
cfg:=tinifile.Create(extractfilepath(application.exename)+"lme.phb");
for i:=1 to num do begin
names[i]:=cfg.ReadString("Record "+inttostr(i), "name", "");
tel1[i]:=cfg.ReadString("Record "+inttostr(i), "tel1", "");
tel2[i]:=cfg.ReadString("Record "+inttostr(i), "tel2", "");
adress[i]:=cfg.ReadString("Record "+inttostr(i), "address", "");
email[i]:=cfg.ReadString("Record "+inttostr(i), "email", "");
birth[i]:=cfg.ReadString("Record "+inttostr(i), "birth", "");
end;
for j:=1 to num do begin
lst.Items.Add(names[j]+"[1]"+tel1[j]+"[2]"+tel2[j]+"[3]"+adress[j]+"[4]"+email[j]+"[5]"+birth[j]);
end;
lst.sorted:=true;
for i:=num-1 downto 0 do begin
buf:=lst.Items[i];
buf1:=copy(buf, 1, pos("[1]", buf)-1);
delete(buf, 1, pos("[1]", buf)+2);
cfg.WriteString("Record "+inttostr(i+1), "name", buf1);
buf1:=copy(buf, 1, pos("[2]", buf)-1);
delete(buf, 1, pos("[2]", buf)+2);
cfg.WriteString("Record "+inttostr(i+1), "tel1", buf1);
buf1:=copy(buf, 1, pos("[3]", buf)-1);
delete(buf, 1, pos("[3]", buf)+2);
cfg.WriteString("Record "+inttostr(i+1), "tel2", buf1);
buf1:=copy(buf, 1, pos("[4]", buf)-1);
delete(buf, 1, pos("[4]", buf)+2);
cfg.WriteString("Record "+inttostr(i+1), "address", buf1);
buf1:=copy(buf, 1, pos("[5]", buf)-1);
delete(buf, 1, pos("[5]", buf)+2);
cfg.WriteString("Record "+inttostr(i+1), "birth", buf1);
cfg.WriteString("Record "+inttostr(i+1), "birth", buf);
end;
end;


что-то не получается! Подскажите, в чем ошибка!!!


 
jedi   (2002-06-09 15:31) [3]

procedure SortSG(var A: TStringGrid; ACol: Integer; Order: Byte);
var
Lo, Hi: Integer;
Mid : String;
T: TStringList;
begin

case Order of
0:
begin
Lo := 1;
Hi := A.RowCount - 1;
Mid := A.Cells[ACol, (Lo + Hi) div 2];
T := TStringList.Create;
try
repeat
while A.Cells[ACol, Lo] < Mid do Inc(Lo);
while A.Cells[ACol, Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T.Assign(A.Rows[Lo]);
A.Rows[Lo].Assign(A.Rows[Hi]);
A.Rows[Hi].Assign(T);
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi, ACol, 0);
if Lo < iHi then QuickSort(A, Lo, iHi, ACol, 0);
finally
T.Free;
end;
end;
1:
begin
Lo := iLo;
Hi := iHi;
Mid := A.Cells[ACol, (Lo + Hi) div 2];
T := TStringList.Create;
try
repeat
while A.Cells[ACol, Lo] > Mid do Inc(Lo);
while A.Cells[ACol, Hi] < Mid do Dec(Hi);
if Lo <= Hi then
begin
T.Assign(A.Rows[Lo]);
A.Rows[Lo].Assign(A.Rows[Hi]);
A.Rows[Hi].Assign(T);
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi, ACol, 1);
if Lo < iHi then QuickSort(A, Lo, iHi, ACol, 1);
finally
T.Free;
end;
end;

end;
end;


 
[BAD]Angel   (2002-06-09 15:45) [4]

[Error] Unit1.pas(76): Undeclared identifier: "iLo"

Это что? :-)


 
[BAD]Angel   (2002-06-09 15:48) [5]

[Error] Unit1.pas(76): Undeclared identifier: "QuickSort"

И еще кое что! ;-))


 
jedi   (2002-06-09 15:58) [6]

Sorry, ya nemnojco izmenil protseduru cotoruiu ya izmenil 4tobi bilo ponyatnee, izna4alno iLo, iHi bili cac vhodnie parametri.
Cstati protsedura napisana na osnove primera iz deplhi:
$DELPHI\Demos\Threads\.

procedure SortSG(var A: TStringGrid; aCol: Integer; Order: Byte);
var
Lo, Hi, iLo, iHi: Integer;
Mid : String;
T: TStringList;
begin
iLo := 1;
iHi := A.RowCount - 1;
Lo := iLo;
Hi := iHi;
Mid := A.Cells[aCol, (Lo + Hi) div 2];
T := TStringList.Create;
try
repeat
case Order of
0:
begin
while A.Cells[aCol, Lo] < Mid do Inc(Lo);
while A.Cells[aCol, Hi] > Mid do Dec(Hi);
end;
1:
begin
while A.Cells[aCol, Lo] > Mid do Inc(Lo);
while A.Cells[aCol, Hi] < Mid do Dec(Hi);
end;
end;
if Lo <= Hi then
begin
T.Assign(A.Rows[Lo]);
A.Rows[Lo].Assign(A.Rows[Hi]);
A.Rows[Hi].Assign(T);
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
case Order of
0:
begin
if Hi > iLo then QuickSort(A, aCol, 0);
if Lo < iHi then QuickSort(A, aCol, 0);
end;
1:
begin
if Hi > iLo then QuickSort(A, aCol, 1);
if Lo < iHi then QuickSort(A, aCol, 1);
end;
end;
finally
T.Free;
end;
end;


 
jedi   (2002-06-09 16:02) [7]

Eshe raz sorry;-).
vot finalnii variant:
----------------------------------------------------------------
procedure SortSG(var A: TStringGrid; aCol: Integer; Order: Byte);
var
Lo, Hi, iLo, iHi: Integer;
Mid : String;
T: TStringList;
begin
iLo := 1;
iHi := A.RowCount - 1;
Lo := iLo;
Hi := iHi;
Mid := A.Cells[aCol, (Lo + Hi) div 2];
T := TStringList.Create;
try
repeat
case Order of
0:
begin
while A.Cells[aCol, Lo] < Mid do Inc(Lo);
while A.Cells[aCol, Hi] > Mid do Dec(Hi);
end;
1:
begin
while A.Cells[aCol, Lo] > Mid do Inc(Lo);
while A.Cells[aCol, Hi] < Mid do Dec(Hi);
end;
end;
if Lo <= Hi then
begin
T.Assign(A.Rows[Lo]);
A.Rows[Lo].Assign(A.Rows[Hi]);
A.Rows[Hi].Assign(T);
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
case Order of
0:
begin
if Hi > iLo then SortSG(A, aCol, 0);
if Lo < iHi then SortSG(A, aCol, 0);
end;
1:
begin
if Hi > iLo then SortSG(A, aCol, 1);
if Lo < iHi then SortSG(A, aCol, 1);
end;
end;
finally
T.Free;
end;
end;


 
[BAD]Angel   (2002-06-09 16:07) [8]

Спасибо!


 
jedi   (2002-06-09 17:26) [9]

Vse taki pravilnee budet tak:

procedure SortSG(var A: TStringGrid; iLo, iHi, aCol: Integer; Order: Byte);
var
Lo, Hi: Integer;
Mid : String;
T: TStringList;
begin
case Order of
0:
begin
Lo := iLo;
Hi := iHi;
Mid := A.Cells[aCol, (Lo + Hi) div 2];
T := TStringList.Create;
try
repeat
while A.Cells[aCol, Lo] < Mid do Inc(Lo);
while A.Cells[aCol, Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T.Assign(A.Rows[Lo]);
A.Rows[Lo].Assign(A.Rows[Hi]);
A.Rows[Hi].Assign(T);
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then SortSG(A, iLo, Hi, aCol, 0);
if Lo < iHi then SortSG(A, Lo, iHi, aCol, 0);
finally
T.Free;
end;
end;
1:
begin
Lo := iLo;
Hi := iHi;
Mid := A.Cells[aCol, (Lo + Hi) div 2];
T := TStringList.Create;
try
repeat
while A.Cells[aCol, Lo] > Mid do Inc(Lo);
while A.Cells[aCol, Hi] < Mid do Dec(Hi);
if Lo <= Hi then
begin
T.Assign(A.Rows[Lo]);
A.Rows[Lo].Assign(A.Rows[Hi]);
A.Rows[Hi].Assign(T);
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then SortSG(A, iLo, Hi, aCol, 1);
if Lo < iHi then SortSG(A, Lo, iHi, aCol, 1);
finally
T.Free;
end;
end;

end;
end;


 
jedi   (2002-06-09 17:30) [10]

primer vizova:
SortSG(SG, 1, SG.RowCount - 1, Col, 0); sortirovca po vozrostaniu
SortSG(SG, 1, SG.RowCount - 1, Col, 1); sortirovca po ubivaniu


 
[BAD]Angel   (2002-06-10 14:48) [11]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2002.06.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.004 c
1-65090
Tahion
2002-06-06 20:13
2002.06.20
Можно ли обьеденить однотипные команды в цыкл или в групу


1-65075
vitall
2002-06-10 13:38
2002.06.20
Как посимвольно прочитать значения из Edit?


4-65295
whc
2002-04-22 17:14
2002.06.20
Обработчик для всех элементов управления на форме


8-65182
OLG
2002-02-06 08:22
2002.06.20
Нужен ваш совет


14-65238
Explorer
2002-05-17 11:28
2002.06.20
Кто работал с компонентами Flat Controls с AfalinaSoft.com?





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