Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для winkode
12 / 12 / 1
Регистрация: 01.03.2012
Сообщений: 159

Удаление дубликатов

13.09.2022, 09:32. Показов 1059. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем,хочу создать программу которая ищет дубликаты в .txt файле,но не простой функционал который оставит только уникальные строки,это слишком просто ))

В текст файле,следующий формат :

192.168.100.11:80
188.110.1.33:80
188.110.1.33:81
166.11.15.76:80
166.11.15.76:81
166.11.15.76:82
190.211.129.230:1000
190.211.129.230:1001
190.211.129.230:1002
190.211.129.230:1003
190.211.129.230:1004
190.211.129.230:1005

Надо оставить уникальные IP,но в зависимости от количество повторов(порт игнорируется),например нас интересует все что меньше или ровно 3 (дубликатов).Получаем на выходе :

192.168.100.11:80
188.110.1.33:80
188.110.1.33:81
166.11.15.76:80
166.11.15.76:81
166.11.15.76:82

у следующего IP(190.211.129.230) 6 повторов,по этому из них оставим только один экземпляр(но желательно и сдесь чтобы могли выбрать сколько повторов оставить),результат будет :

VB.NET
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
27
28
29
30
31
32
33
34
35
36
 Dim iplist As New List(Of String)
        Dim outlist As New List(Of String)
        Dim goodlist As New List(Of String)
        Dim badlist As New List(Of String)
        Dim max_dubl As Integer = 3
        Dim ip as string
        Dim port as string
 
        For Each line As String In File.ReadLines("IPs.txt")
            Dim seperator() As String = {":"}
            Dim part As String() = line.Split(seperator, StringSplitOptions.RemoveEmptyEntries)
 
            ip = part(0)
            port = part(1)
 
            iplist.Add(ip)
            outlist.Add(line)
        Next
 
        For Each item In outlist
            Dim seperator() As String = {":"}
            Dim part As String() = item.Split(seperator, StringSplitOptions.RemoveEmptyEntries)
 
            If iplist.Where(Function(value) value = part(0)).Count <= max_dubl Then
 
                goodlist.Add(item)
 
            Else
 
                badlist.Add(item)
 
            End If
        Next
 
        System.IO.File.WriteAllLines("Good.txt", goodlist)  
        System.IO.File.WriteAllLines("Bad.txt", badlist)
Получается копировать все IP которые повторяется не больше 3 раза,но не знаю как добавить там и один или несколько(например 2) из тех кто больше повторов.

Еще желательно чтобы работала быстро,в файле 500.000-700.000 строк.
Какие мысли,как это можно сделать?
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2022, 09:32
Ответы с готовыми решениями:

Удаление дубликатов в ComboBox
Добрый день возникла такая ошибка при удаление дубликатов из ComboBox, как можно исправить? System.Reflection.TargetInvocationException...

Поиск и удаление дубликатов в DataGridView
Поправьте, что делаю не так Dim ii&amp; Dim i As Integer Dim rowid As String Dim RowI As Object Dim...

Удаление дубликатов по столбцу DataGridview
Public Sub RemovDublicate(ByRef dgv As DataGridView, ByVal NumberCol As Integer) For intI = dgv.Rows.Count - 1 To 0 Step -1 ...

3
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
13.09.2022, 09:53
Лучший ответ Сообщение было отмечено winkode как решение

Решение

winkode, вот так попробуйте
VB.NET
1
2
3
4
5
Dim goodList As List(Of String) = File.ReadLines("IPs.txt").
    GroupBy(Function(l) l.Split(":"c)(0)).
    Select(Function(g) If(g.Count() < 4, g, g.Take(1))).
    SelectMany(Function(g) g).
    ToList()
5
 Аватар для winkode
12 / 12 / 1
Регистрация: 01.03.2012
Сообщений: 159
13.09.2022, 10:40  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
вот так попробуйте
Очень красиво и в несколько строк ))
А как сохранить дубликаты в отдельном файле(те кто больше 3)?
0
 Аватар для winkode
12 / 12 / 1
Регистрация: 01.03.2012
Сообщений: 159
13.09.2022, 20:21  [ТС]
Цитата Сообщение от winkode Посмотреть сообщение
А как сохранить дубликаты в отдельном файле(те кто больше 3)?
Можно как отдельную функцию,ничего не меняя в коде который оставили.
VB.NET
1
2
3
4
5
If iplist.Where(Function(value) value = part(0)).Count <= max_dubl Then
                goodlist.Add(item)
            Else
                badlist.Add(item)
            End If
Мой вариант очень медленный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2022, 20:21
Помогаю со студенческими работами здесь

Добавить из DataGrid в SQL без дубликатов
Добрый день всем, возник вопрос: Sub connectsql() connsql = New SqlConnection(&quot;Server= '&quot; &amp;...

Поиск дубликатов в DataGridView и окрашивание повторов в разные цвета
Всем доброго времени суток! Код находит в первом столбце все одинаковые значения, но окрашивает их попарно, т.е. если будет 3 или 4...

Проверка существования записи в БД, чтобы избежать записей-дубликатов
Здравствуйте. Проверяю существование записи в БД,чтобы избежать записей-дубликатов. Если в базе данных в таблице Users уже есть запись...

Сохранить данные из ListView в базу SQL без дубликатов
Добрый день Всем! С новым годом) Есть прибор который отмечает приход и уход сотрудников компании ZKTeco. У меня есть SDK с...

Удаление дубликатов
Всем привет Пробую зачистить строки от повторений Текст строк примерно такой RRs.Mmm.sss.20190124_185954.txt 19:00:01...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru