Вход | Регистрация
 

Как найти повторяющиеся значения в dbf

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.