Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
[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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-65020
Magic
2002-06-09 10:08
2002.06.20
TStringGrid - его методы


14-65227
MisterBin
2002-05-17 11:01
2002.06.20
Кто смотрел фильм


3-64930
Chainik
2002-05-27 10:41
2002.06.20
Проблема даты


3-64895
AFROLOV
2002-05-29 11:51
2002.06.20
Каким образом можно работать с БД из DLL?


14-65213
Miwa
2002-05-16 01:30
2002.06.20
Распознавание голоса в компютере.





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