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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2018, 00:34   #1
Tynya
Пользователь
 
Регистрация: 06.12.2017
Сообщений: 13
По умолчанию Сортировка простым выбором

Добрый вечер!
Возникла такая проблема, требуется отсортировать данные методом простого выбора. Почти все нормально, но возникает проблема с первой строкой, ее просто стирает. Подскажите, пожалуйста, в чем проблема, голова ночью не очень варит+много работы осталось!!
Вот код сортировки по одному критерию:

procedure TForm2.btn1_sort_okClick(Sender: TObject);
type
TInfo=record
name:string[50];
data:string[35];
genre:string[20];
rating:integer;
dlc:string[4];
engine:string[15];
end;
var
i,j,n:Integer; c:TInfo;
begin
if cbb1_sort.ItemIndex=0 then
for i:=0 to strngrd1.rowcount-1 do
begin
n:=i;
for j:=i+1 to strngrd1.rowcount do
if strngrd1.Cells[0,j]<strngrd1.Cells[0,n] then
n:=j;
if n <> i then
begin
c.name:=strngrd1.Cells[0,i];
c.data:=strngrd1.Cells[1,i];
c.genre:=strngrd1.Cells[2,i];
c.rating:=StrToInt(strngrd1.Cells[3,i]);
c.dlc:=strngrd1.Cells[4,i];
c.engine:=strngrd1.Cells[5,i];
strngrd1.Cells[0,i]:=strngrd1.Cells[0,n];
strngrd1.Cells[1,i]:=strngrd1.Cells[1,n];
strngrd1.Cells[2,i]:=strngrd1.Cells[2,n];
strngrd1.Cells[3,i]:=strngrd1.Cells[3,n];
strngrd1.Cells[4,i]:=strngrd1.Cells[4,n];
strngrd1.Cells[5,i]:=strngrd1.Cells[5,n];
strngrd1.Cells[0,n]:=c.name;
strngrd1.Cells[1,n]:=c.data;
strngrd1.Cells[2,n]:=c.genre;
strngrd1.Cells[3,n]:=inttostr(c.rating);
strngrd1.Cells[4,n]:=c.dlc;
strngrd1.Cells[5,n]:=c.engine;
end;
end;
Tynya вне форума Ответить с цитированием
Старый 18.06.2018, 00:59   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
for i:=0 to strngrd1.rowcount-1 do
begin
n:=i;
for j:=i+1 to strngrd1.rowcount do
Для оформления кода используйте тег CODE (символ решётки над полем ввода)

Теперь по сути: значения StringGrid.RowCount хранят действительно количество строк, НО: нумерация их идёт от нуля, соответственно верхняя граница уменьшается на 1 (то есть 0 .. RowCount - 1)

Следовательно, Ваши циклы должны выглядеть так:

Код:
for i:=0 to strngrd1.rowcount - 2 do
begin
n:=i;
for j:=i+1 to strngrd1.rowcount - 1 do
Смотрел код мельком, в саму сортировку не вникал особо.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.06.2018, 01:03   #3
Tynya
Пользователь
 
Регистрация: 06.12.2017
Сообщений: 13
По умолчанию

Как ни странно, но не работает...
Tynya вне форума Ответить с цитированием
Старый 18.06.2018, 01:05   #4
Tynya
Пользователь
 
Регистрация: 06.12.2017
Сообщений: 13
По умолчанию

Так, стоп-с, беру свои слова обратно.
Все работает! Спасибо!!!
Tynya вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка простым выбором qpuTuJlb Общие вопросы Delphi 0 09.11.2013 22:02
Сортировка строк простым выбором datgen Общие вопросы C/C++ 0 25.12.2011 19:41
Сортировка простым выбором vit9i Помощь студентам 1 31.05.2011 20:41
Сортировка простым выбором в Delphi Vlad111 Помощь студентам 0 13.11.2009 10:03
Сортировка простым выбором (метод пузырька)) Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.09.2009 18:06