Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61

Сравнение двух StringGrid-ов по определенным столбцам

13.03.2015, 15:19. Показов 1802. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Сейчас буду пробовать объяснить, что я хочу)

Значит так... есть у меня 2 excel'овских файлов, я их загружаю в 2 StringGrida.
Пользователь с помощью мышки выбирает по каким столбцам пойдет сравнение (поля попадают в CheckListBox).
Дальше мне надо сравнивать строки только по выбранным столбцам и если они полностью равны, то скопировать результат excel (ну, это уже так... для информации).

Что сделано
в отдельный массив я копирую номера столбцов, которые выбрал пользователь.
дальше сравниваю. не могу объяснить буковками, поэтому показываю)))
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  kol := CheckListBoxCompare.Items.Count;
  SetLength(Mass_Column,kol);
  flag := true;
 
// Тут я заполняю массив номерами столбцов
  for i := 0 to kol-1 do
  for j := 0 to StringGridF1.ColCount do
    begin
      if StringGridF1.Cells[j,0] = CheckListBoxCompare.Items[i] then
        Mass_Column[i] := j;
    end;
 
// здесь я сравниваю
  for j := 0 to StringGridF1.RowCount do
    begin
      for i := 0 to kol-1 do
        begin
        if StringGridF1.Cells[Mass_Column[i],j] = StringGridF2.Cells[Mass_Column[i],j] then
          RowPos := i
        else
         flag := false;
        end;
        if flag then
    StringGrid1.Cells[j,RowPos] := StringGridF1.Cells[j,RowPos];
  flag := true;
    end;
Попробую сформулировать вопрос)
как мне скопировать строки (равные StringGrid'ах)?
Куда уже пофиг, главное алгоритм понять.

Ух, вроде все))
ПыСы. Ногами не пинать, что не понятно спрашивать.

Добавлено через 43 минуты
Как говориться, хорошая мысля приходит опосля)
Вот нашла решение, как-то так

Delphi
1
2
3
4
5
6
7
8
9
10
11
  for j := 0 to StringGridF1.RowCount do
    begin
      for i := 0 to kol-1 do
        begin
          if StringGridF1.Cells[Mass_Column[i],j] = StringGridF2.Cells[Mass_Column[i],j]
            then StringGrid1.Cells[i,j-RowPos] := StringGridF1.Cells[Mass_Column[i],j]
          else flag := false;
        end;
      if flag = false then RowPos := RowPos+1;
      flag := true;
    end;
Добавлено через 16 минут
Ан нет... работает если номера строк вровень идут.
Если, например, первая строчка 1 СтринГрида = второй строчке 2 СтринГрида, не работает...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2015, 15:19
Ответы с готовыми решениями:

Сравнение строк по определенным столбцам
Здравствуйте, задачка тут у меня возникла..к сожалению забыл институтский курс помню там было и макросы писали..умом чувствую что не...

Сравнение двух таблиц, поиск совпадений по 3-м столбцам
Доброго времени суток! Есть задача - сравнить 2 таблицы (одна свежая, вторая за предыдущий день), найти совпадения по наименованию товара...

Сравнение двух StringGrid
Здравствуйте! На форме у меня присутствует 3 StringGrid, в первые два выполняется загрузка с файлов, по подобной схеме: TStringList...

18
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
13.03.2015, 19:33
непонятно

надо одну колонку выбрать в одном гриде и одну в другом?
в каком случае считать, что колонки равны?
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
16.03.2015, 14:44  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
непонятно
надо одну колонку выбрать в одном гриде и одну в другом?
в каком случае считать, что колонки равны?
Ох, так и знала))
Давайте сначала. Прям конкретную задачу рассказываю.

Мне по работе куча ЖКС, УК и тд. присылает начисления по квартплате. Но как все бывает у нас в России, на одну и туже квартиру разные компании присылают начисления, т.е. одна компания прислала - воду и содержание и ремонт, вторая - электричество, третья - газ и т.д.

Очень трудоемко их обрабатывать, т.к. приходится загружать в программу все файлы. Обезьянья работа.
Что я хочу. Сравнивать файлы по столбцам (город-улица-квартира-комната) и если есть совпадение - копировать определенную ячейку в общий файл. Мысля как это реализовать есть, но вот споткнулась.

Как мне кажется надо делать, я беру первую строку в первом гриде и ищу ее во втором. Если совпадение есть я эту первую строку копирую в отдельный грид. Но как это сделать?
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
16.03.2015, 15:04
т.е. базы данных еще не изобрели у вас?
работа представляется довольно обычной
1) в текстовом документе выделить информацию - Кому начислено, Кем начислено, Когда, За что, Сколько
2) все это импортировать в БД
3) выводить и обрабатывать информацию из БД любым способом
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
16.03.2015, 15:21  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
т.е. базы данных еще не изобрели у вас?
работа представляется довольно обычной
1) в текстовом документе выделить информацию - Кому начислено, Кем начислено, Когда, За что, Сколько
2) все это импортировать в БД
3) выводить и обрабатывать информацию из БД любым способом
я и загружаю эти файлы в базу данных. просто их дохрена, зачем мне мучаться загружать 25 файлов, если их можно собрать до 1. весь рабочий день уходит на загрузку.
Я хочу собирать один большой файл и его уже загружать.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
16.03.2015, 15:40
разницы между загрузкой 25*1 и 1*25 файлов в БД нет
все тормоза могут быть только в интерфейсе

давайте решать нормальную задачу, а не высосанную из пальца
надо разбираться на что уходит время в бизнес-процессе

покажите что есть сейчас, подскажем, как сделать лучше
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
16.03.2015, 16:00  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
разницы между загрузкой 25*1 и 1*25 файлов в БД нет
все тормоза могут быть только в интерфейсе
давайте решать нормальную задачу, а не высосанную из пальца
надо разбираться на что уходит время в бизнес-процессе
покажите что есть сейчас, подскажем, как сделать лучше
Вот говорила мне мама - учись с людьми разговаривать)
Значит так...
Есть компания №1 - которая присылает начисление на дом №1
Есть компания №2 - которая присылает начисление на дом №2
Есть компания №3 - которая присылает начисление на дом №3
Есть компания №4 - которая присылает начисление на дом №1, №2, №3.

Есть программа (областная, покупная) - в которую я эти начисления загружаю.
Загружаю как: делаю вручную связку по полям по которым идет поиск, меняю месяц начисления, указываю поля, которые будет залиты в базу. и так с каждым фалом. вручную укажи - вручную загрузи.

что я хочу. денег побольше и работы поменьше, но все таки)...
я хочу брать один файл - основной (его присылает расчетный центр, где есть все дома) и из других файлов заполнять пустые поля (т.е. дополнять основной файл недостающими начислениями - водой, отоплением и т.д.)
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
16.03.2015, 20:28
отлично! )
с этого стоило начать, теперь почти понятно
теперь можно по существу вопросы задавать :

1) компания X всегда присылает файл одинакового формата ?
2) нужны примеры файлов 1,2,3,4, пусть 2 строки с вымышленными данными

экспорт/импорт данных - всегда операция с ручной настройкой и доводкой, но можно действительно сильно сократить

дайте взглянуть, и решим, как поступить...
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
17.03.2015, 09:33  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
отлично! )
с этого стоило начать, теперь почти понятно
теперь можно по существу вопросы задавать :
1) компания X всегда присылает файл одинакового формата ?
2) нужны примеры файлов 1,2,3,4, пусть 2 строки с вымышленными данными
экспорт/импорт данных - всегда операция с ручной настройкой и доводкой, но можно действительно сильно сократить
дайте взглянуть, и решим, как поступить...
1) Да, все компании присылают файлы единого формата.
2) файл прикрепила.
Вложения
Тип файла: xls nach_02_2015_1.xls (27.0 Кб, 6 просмотров)
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
17.03.2015, 09:48
хорошо
тогда вообще непонятно
если просто все данные друг за другом в один файл скидать, ничего не меняя, как к этому отнесется программа ?
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
18.03.2015, 12:35  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
если просто все данные друг за другом в один файл скидать, ничего не меняя, как к этому отнесется программа ?
Если стоит ноль, программа загрузит ноль, не взирая на внесенные до этого данные.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
18.03.2015, 12:46
т.е. если строки полностью одинаковые кроме начислений, нужно начисления суммировать ?
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
18.03.2015, 14:48  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
т.е. если строки полностью одинаковые кроме начислений, нужно начисления суммировать ?
Да, да, да)))
только начисления не надо суммировать, т.к. не может разные компании подавать одинаковые начисления. если одна из ЖКУ уже подала, например, отопление, то расчетный цент - уже не подаст эти данные.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
18.03.2015, 15:26
так и получается, что именно суммировать
вы же говорите что если в файле будут строки для одного клиента
GAZ ELECTRICITY
0 100
100 0
то ваша купленная программа запишет только последнее, т.е.
100 0
а вот если все сложить, то будет
100 100
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
18.03.2015, 15:48  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
так и получается, что именно суммировать
вы же говорите что если в файле будут строки для одного клиента
GAZ ELECTRICITY
0 100
100 0
то ваша купленная программа запишет только последнее, т.е.
100 0
а вот если все сложить, то будет
100 100
а-а-а, т.е. вы предлагаете все собирать в один файл, а уже потом анализировать этот один файл?
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
18.03.2015, 15:57
вообще не анализировать, просто скормить программе
0
 Аватар для JonniK
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 61
20.03.2015, 10:01  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
вообще не анализировать, просто скормить программе
Цитата Сообщение от krapotkin Посмотреть сообщение
GAZ ELECTRICITY
0 100
100 0
то ваша купленная программа запишет только последнее, т.е.
100 0
еще раз, на примере того который вы привели.
программа не складывает, она просто затирает прошлое значение.
т.е. последняя запись будет 100 0
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
20.03.2015, 11:54
Не по теме, но:
функции ВПР и СУММЕСЛИМН в Excel еще, наверное, не придумали...
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,666
Записей в блоге: 21
20.03.2015, 13:41
сам сбор файлов в один Excel будет не очень
проще сначала программой прогнать, сделать итого, потом скормить это в ТУ САМУЮ программу...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2015, 13:41
Помогаю со студенческими работами здесь

Сравнение двух StringGrid-ов
здравствуйте уважаемые форумчане,вот возникла такая проблемка со сравнением двух stringgread: по сути код должен сравнивать поелементно...

Сравнение двух ячеек в StringGrid
Доброго времени дня. Есть StringGrid1, в котором 4 столбца*10 строк(картотека). Он заполняется. Потом в Edit вводится фамилия. При...

Сравнение данных из двух StringGrid
Здравствуйте, имеется два StringGrid. Данные в StringGrid загружаются из двух разных excel файлов. Необходимо сравнить две таблицы и данные...

Сравнение данных из двух StringGrid
Добрый день, добавляю данные в StringGrid, подскажите как их сравнить ? Добавлено через 59 секунд var pl, tl,py,ty: TStringList; ...

Сравнение двух столбцов в разных StringGrid с разной размерностью
Добрый день. Подскажите пожалуйста, как реализовать сравнение текста в двух столбцах в разных стринггридах. Размерность разная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru