![]() |
![]() |
![]() |
|
Подскажите плиз! Как проверить на идентичность 2 таблицы значений! Ø |
☑ | ||
---|---|---|---|---|
0
stariy
22.08.06
✎
15:16
|
Подскажите плиз! Как проверить на идентичность 2 таблицы значений!
Есть ли какой алгоритм... перебор... уж очень мне не нравиться эта идея. Смысл такой есть 2 ТЗ скажем по 1000 строк нужно проверить идентичны они или нет, причем не строки а вся ТЗ в целом идентична второй или нет... |
|||
1
Ахмед ибн Фадлан
22.08.06
✎
15:18
|
В в77? Посортировать одинаково, ЗначениеВСтрокуВнутр и сравнить строки. Правда не знаю сколько он будет сравнивать большие таблицы.
|
|||
2
stariy
22.08.06
✎
15:24
|
ок
сейчас попробую |
|||
3
stariy
22.08.06
✎
15:28
|
попробовал сразу так
Если ЗначениеВСтрокуВнутр(Материалы)=ЗначениеВСтрокуВнутр(МатериалыНовые) тогда ... Материалы и материалыНовые - это ТЗ так вот результат ЗначениеВСтрокуВнутр для одинаковых ТЗ разный... может по строкам нужно:? |
|||
4
stariy
22.08.06
✎
15:30
|
для 2 одинаковых ТЗ получилось так :
{"#",2c6006f3-7e85-4a97-a820-66b8142aa341} {"#",044f796d-d54c-40c6-8a32-1f428408450e} |
|||
5
Ахмед ибн Фадлан
22.08.06
✎
15:36
|
2(4) Этот способ для в77. Для в8... не знаю... по-моему можно просто сравнить. Две переменные? Или нет? Тогда может их загнать в хранилище значений?
|
|||
6
stariy
22.08.06
✎
15:38
|
просто сравнить = не работает...
а в хранилище загонять:? в чем смысл.. загоню а как проверить равны они или нет:? |
|||
7
Сисой
22.08.06
✎
15:50
|
Надо дождаться 8.1. Временные таблицы рулят.
|
|||
8
stariy
22.08.06
✎
15:52
|
да уж..
хотелось бы но сейчас надо... |
|||
9
Ахмед ибн Фадлан
22.08.06
✎
15:58
|
2(6) Не могу сказать, это на уровне интуиции - загнать в хранилище значений как двоичные данные и потом сравнить эти два хранилища.
Или даже не знаю... использовать сериализацию ХМЛ... но вот не могу сказать весь алгоритм до конца. Это так - просто направленияв которых бы я думал. |
|||
10
angro
22.08.06
✎
16:00
|
как вариант
отсортировать по всем колонкам, а потом сравнить построчно. |
|||
11
stariy
22.08.06
✎
16:05
|
ок
буду думать спасибо |
|||
12
stariy
22.08.06
✎
16:09
|
to 10
привет! пробовал... не хочется перебором просто понимаешь... ТЗ могут быть большие более 1000 строк. |
|||
13
angro
22.08.06
✎
16:10
|
для сч=0 по ТЗ.Количество()-1 цикл
строка = ТЗ[сч]; строка2 = ТЗ2[сч]; для сч2=0 по ТЗ.Колонки.Количество()-1 цикл Если строка[сч2]<>строка2[сч2] тогда возврат "массивы разные"; КонецЕсли; КонецЦикла; КонецЦикла; |
|||
14
angro
22.08.06
✎
16:12
|
здорово,
У тебя в этом месте тормозит? если будет тормозить тогда и надо думать о производительности. По любому на каком-то этапе будет перебор. |
|||
15
angro
22.08.06
✎
16:15
|
в цикле загоняем все значения в строку, одну ТЗ в одну строку, другую ТЗ в другую, и сравниваем строки. Программер после тебя голову сломает в этом месте.
|
|||
16
Чучундер
22.08.06
✎
16:15
|
Правда где-то в рааонй сохранить строку внутр и сравнить
только учесть что внутренние значения ТЗ1.НоваяКолонка("Клиент","Справочник.Номенклатура") ТЗ2.НоваяКолонка("Клиент","Справочник") ТЗ1.Клиент = СрК.ТкущийЭлемент(); ТЗ2.Клиент = СрК.ТкущийЭлемент(); внутренние значения ТЗ1.Клиент и ТЗ2.Клиент - РАЗНЫЕ |
|||
17
stariy
22.08.06
✎
16:15
|
уже тормозит...
при больших ТЗ а примерно так у меня сейчас и сделано... |
|||
18
Чучундер
22.08.06
✎
16:17
|
Слить две таблицы в третью и свернуть е по всем колонкам. если количество строк = количуству строк ТЗ1 или ТЗ2 - тогда равны, иначе - нет
|
|||
19
angro
22.08.06
✎
16:19
|
добавление к (18) только перед этим пронумеровать, а то если в ТЗ есть повторяющиеся строки, так работать не будет.
|
|||
20
Ахмед ибн Фадлан
22.08.06
✎
16:21
|
2(18,19) блин, гениально! :) молодцы
|
|||
21
stariy
22.08.06
✎
16:21
|
to 17
сделано как в 13 спасибо за 18 и 19 |
|||
22
Чучундер
22.08.06
✎
16:27
|
Правильный и красивый вариант в (3) + (16)
строки не сравнивать а сложить побитово результат проинтепретировать как число, если = 0 - то ТЗ одинаковые |
|||
23
mcoff
23.08.06
✎
03:11
|
to 22
в таком случае уж xor|and - быстрее будет. |
|||
24
Чучундер
23.08.06
✎
11:22
|
(23) Ну это и имелось в виду
|
|||
25
Myst
25.08.06
✎
17:55
|
самый простой способ это скопировать в одну таблицу и свернуть по свсем полям.Если количество строк будет равно количеству исходной таблицы можно предположить с высокой вероятностью что они идентичны
|
|||
26
Dev
25.08.06
✎
19:47
|
(18,25) А как можно слить две таблицы в одну без перебора? Простите плохо знаю 8
|
|||
27
saper
26.08.06
✎
15:02
|
(26) 7.7
ТЗ_1.КоличествоСтрок(ТЗ_1.КоличествоСтрок() + ТЗ_2.КоличествоСтрок()); ТЗ_1.Заполнить(ТЗ_2, ТЗ_1.КоличествоСтрок()- ТЗ_2.КоличествоСтрок() + 1,); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |