![]() |
![]() |
|
Как найти повторяющиеся значения в dbf | ☑ | ||
---|---|---|---|---|
0
miracled
11.06.20
✎
08:31
|
Имеется файл dbf в котором больше 50000 полей.Соответственно путём перебора всех строк, а ещё и в цикле, поиск в нём будет происходить слишком долго.
Методы Найти и НайтиПоКлючу использует индексный файл и находит только первое значение,а они у меня повторяются. Собственно вопрос : как найти повторяющиеся элементы? |
|||
1
Гобсек
11.06.20
✎
08:40
|
Когда я работал на foxpro, то в подобном случае создавал подходящий индекс и просматривал записи в цикле. Повторяющиеся записи идут подряд.
После перехода на 1С в подобных случаях создаю в 1С таблицу, загружаю в неё данные из dbf. В 1С такая задача решается аналогично. |
|||
2
AAA
11.06.20
✎
08:42
|
50000 полей или записей ?
|
|||
3
miracled
11.06.20
✎
08:43
|
(2)Имел ввиду записей
|
|||
4
miracled
11.06.20
✎
08:44
|
(1)Спасибо,попробую сделать через таблицу.
Если у кого-то ещё есть варианты,буду рад услышать |
|||
5
AAA
11.06.20
✎
08:45
|
50000 записей - это вообще ни о чем, закачать в таблицу значений и делай с ней что хочешь
|
|||
6
ДенисЧ
11.06.20
✎
08:45
|
Взять какую-то компононету для обращения к дбф (например, адо) и запросом...
|
|||
7
Bigbro
11.06.20
✎
09:14
|
сделать новый ключ который будет уникальным и искать по нему.
|
|||
8
ASU_Diamond
11.06.20
✎
09:37
|
(1) в 1С проще: загнал дбф в ТЗ; добавил колонку, которую заполняешь единичками; сворачиваешь по нужному полю, добавленную колонку суммируешь; сортируешь по добавленному полю по убыванию - в начале таблицы идут значения с дублями. Так можно по нескольким полям анализ проводить.
|
|||
9
miracled
11.06.20
✎
09:45
|
Долго будет заполняться 50000 записей в ТЗ?
|
|||
10
ASU_Diamond
11.06.20
✎
10:02
|
(9) от секунды до бесконечности. Всё зависит от данных.
|
|||
11
trad
11.06.20
✎
10:10
|
(9) не надо никаких ТЗ
0. Если не существует, то добавить индекс соответствующий ключу поиска 1. ТекущийИндекс = Индекс 2. НайтиПоКлючу("=") 3. в цикле Следующая() пока поля равны ключу |
|||
12
AAA
11.06.20
✎
10:16
|
(8)Поддерживаю
(11)спорно Я так понимаю, что задача разовая и надо решать ее как разовую, просто взять и сделать Ну будет выполняться 5 сек или 8, какая разница для обсуждаемого вопроса ? Надо просто брать и делать |
|||
13
ASU_Diamond
11.06.20
✎
10:31
|
(11) Всё зависит от задачи. Оптимальнее конечно вообще не с помощью 1С это делать.
|
|||
14
AAA
11.06.20
✎
10:35
|
Можно вообще из 1с 7.7 одним прямым запросом - SELECT, COUNT(), HAVING
|
|||
15
trad
11.06.20
✎
10:37
|
(12) если задача разовая, то (11) тоже проще всего
|
|||
16
AAA
11.06.20
✎
10:41
|
За время обсуждения я бы уже сделал всеми рекомендуемыми способами )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |