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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2016, 19:20   #1
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
Сообщение Сравнить строки StringGrid1 и StringGrid2

Всем доброго времени суток, Чтобы было понятно поясню подробно то что я хочу получить:
Есть 2 таблицы в StringGrid1 и StringGrid2, которые я гружу из фалов MS Word, мне надо чтобы в компонент StringGrid3 выводились те строки, которые есть в StrdingGrid2, но нет в StringGrid1, сравнение идёт по 1 столбцу (и только по нему).
Выложил скриншоты, чтобы было наглядней:
Т.е. у меня в StringGrid3 должны вывестись строки:
4-Г
1.png

2.png

3.png

4.png
вот код, который я нашёл на форуме, но не могу довести его до ума, помогите пожалуйста
Цитата:
procedure TForm1.sBitBtn5Click(Sender: TObject);
var
i,k:integer;
begin
form3.show;
k:=-1;
for i:=0 to StringGrid1.RowCount-1 do
if pos(StringGrid1.Cells[1,i],StringGrid2.Cells[1,i])<>0 then
begin
inc(k);
form3.StringGrid1.Rows[k].Text:=StringGrid2.Rows[i].Text;
end;
end;

Последний раз редактировалось San22Rus; 05.09.2016 в 19:23.
San22Rus вне форума Ответить с цитированием
Старый 05.09.2016, 23:22   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если таблицы не большие, то можно попробовать поиск "в лоб" (перебором)

примерно так:
Код:
var
    i,j,k:integer;
begin
	form3.show;
	k:=-1;
	for i:=0 to StringGrid2.RowCount-1 do begin
		j:=0;
		while (j<StringGrid1.RowCount-1) 
			and (StringGrid1.Cells[1,j]<>StringGrid2.Cells[1,i]) 
				do  inc(j);
		if (j>=StringGrid1.RowCount-1) then begin
			inc(k);
			form3.StringGrid1.Rows[k].Text:=StringGrid2.Rows[i].Text;
		 end;
	end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2016, 05:24   #3
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
Сообщение

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
если таблицы не большие, то можно попробовать поиск "в лоб" (перебором)
Таблицы будут содержать не больше 1000 записей, пойдёт мне такой вариант? Я проверил, работает
San22Rus вне форума Ответить с цитированием
Старый 06.09.2016, 05:56   #4
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
По умолчанию

Всё равно спасибо вам!
San22Rus вне форума Ответить с цитированием
Старый 06.09.2016, 06:28   #5
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
По умолчанию

Такой вариант мне не подошёл, он выводит только первые 5 записей которых нет в одной из таблиц, а их может быть много
San22Rus вне форума Ответить с цитированием
Старый 06.09.2016, 10:03   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Такой вариант мне не подошёл
ну, бывает.
хотя странно, в коде нет никаких ограничений.

Цитата:
он выводит только первые 5 записей которых он выводит только первые 5 записей которых нет в одной из таблиц, а их может быть много, а их может быть много
во-первых, при чём здесь " нет в одной из таблиц"
код делает то, что Вы попросили:
Цитата:
в компонент StringGrid3 выводились те строки, которые есть в StrdingGrid2, но нет в StringGrid1
во-вторых, проверьте ваш StringGrid3 (на форме Form3) - сделайте ему вертикальный скроллбар -
может быть, там записей много, а Вы видите только первые 5.
кроме того, Вы уверены, что в гриде2 есть больше 5 строк, которых нет в грид1 ?!

давайте больше конкретики, больше шансов получить помощь.


p.s.
Цитата:
Таблицы будут содержать не больше 1000 записей, пойдёт мне такой вариант?
ну, это не очень большие значения.
ну, такие таблицы будут обрабатываться несколько секунд. Это можно ускорить усложнив код обработки.
Подойдёт ли Вам первый вариант по быстродействию, я не знаю, это же Вам решать, подходит или нет,
можно ожидать несколько секунд или надо быстрее
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2016, 10:10   #7
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
По умолчанию

Цитата:
во-вторых, проверьте ваш StringGrid3 (на форме Form3) - сделайте ему вертикальный скроллбар -
может быть, там записей много, а Вы видите только первые 5.
Да нет, StringGrid растянутый (скрин выложу)
Цитата:
кроме того, Вы уверены, что в гриде2 есть больше 5 строк, которых нет в грид1 ?!
по поводу этого тоже уверен, создал маленькие таблицы для проверки и там посчитал
San22Rus вне форума Ответить с цитированием
Старый 06.09.2016, 10:14   #8
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
По умолчанию

Цитата:
ну, такие таблицы будут обрабатываться несколько секунд. Это можно ускорить усложнив код обработки.
Мне вполне подойдёт, даже если придётся ждать
San22Rus вне форума Ответить с цитированием
Старый 06.09.2016, 10:18   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
по поводу этого тоже уверен, создал маленькие таблицы для проверки и там посчитал
можете выложить архив с тестовыми табличками (на которых проверяли работу) и сам проект с программой?
я посмотрю, что у Вас не работает!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2016, 10:21   #10
San22Rus
Пользователь
 
Регистрация: 07.03.2016
Сообщений: 20
Сообщение

Конечно, только вот архив у меня 4.14, а разрешено загружать файлы не более 3.6

Последний раз редактировалось San22Rus; 06.09.2016 в 10:28.
San22Rus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перетаскивание информации из StringGrid1 в StringGrid2 Delphi 7 carrie bradshaw Помощь студентам 2 24.03.2014 14:56
Скопировать данные с одного StringGrid1 в другой StringGrid2 Екатерина_21 C++ Builder 2 09.10.2011 17:06
Как экспортировать StringGrid1 и StringGrid2 в Word koysara Общие вопросы Delphi 1 05.10.2010 12:18
из StringGrid1 в StringGrid2 robin39 Помощь студентам 1 27.05.2010 19:33
StringGrid1 и StringGrid2. Их связь 2Live Общие вопросы C/C++ 4 03.09.2009 20:10