Главная страница
    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.005 c
14-65213
Miwa
2002-05-16 01:30
2002.06.20
Распознавание голоса в компютере.


1-65010
Qpwoe
2002-06-08 15:13
2002.06.20
Люди, подскажите как запускать файл из проги?


7-65260
ЗЛ
2002-03-22 08:17
2002.06.20
Как вырубить клаву, а потом снова включить, оставив работать толь мышь. И как заставить винт шуметь на определенное время


3-64990
Draculenok
2002-05-28 13:28
2002.06.20
Скорость работы ...


3-64920
ROCKET
2002-05-26 00:46
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский