Фильрация спаршеного результата (удаление повторных доменов)

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Есть спаршеные урлы

http://Хлам.ру/киногавно1
http://Хлам.ру/киногавно1
http://Хлам.ру/киногавно2
http://Хлам.ру/киногавно3
http://Хлам.ру/киногавно4
http://Хлам3.ру/киногавно1
http://Хлам3.ру/киногавно1
http://Хлам3.ру/киногавно2
http://Хлам3.ру/киногавно3
http://Хлам3.ру/киногавно4

По итогу после очистки он оставил только уникальные домены

http://Хлам3.ру/киногавно2
http://Хлам.ру/киногавно3

Тоесть из 10 строк 2 никальных домена ..

Как это можно реализовать
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Действие/Списки/Операции над списком В свойствах действия выбираем удалить дубли. Это если в кубиках.
Если нужно в C# то примерно так:
C#:
//список с повторяющимися элементами
List<string> list = new List<string>(){
    "item1",
    "item2",
    "item3",
    "item1",
    "item2",
    "item3"
}

//удалили дубли
list = list.Distinct().ToList();
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Действие/Списки/Операции над списком В свойствах действия выбираем удалить дубли. Это если в кубиках.
Если нужно в C# то примерно так:
C#:
//список с повторяющимися элементами
List<string> list = new List<string>(){
    "item1",
    "item2",
    "item3",
    "item1",
    "item2",
    "item3"
}

//удалили дубли
list = list.Distinct().ToList();
он будет фильтровать именно домены?? или в принципе дубли строк?
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Дубли строк. Однако это процентов на 80 решит задачу (а может и на 99 — т.к. урлы все же достаточно уникальны (с разбегу могу придумать явно определяемый дубль лишь на уровне протокола)).
А чтобы фильтровать домены по нужным именно вам условиям, придется написать собственную логику.
Например, использовать класс System.Uri (перегонять в него строку, проверять, что строка действительно URL, сравнивать и т.д.) или разбирать каждую строку по разделителю / и работать с массивами — опять же, проверять, сравнивать или что там еще может быть нужно, после собирать массив опять в строку и работать с ней. Это на вскидку, не имея представления, что именно вам нужно и какие подвохи вы ожидаете от списка урлов
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Дубли строк. Однако это процентов на 80 решит задачу (а может и на 99 — т.к. урлы все же достаточно уникальны (с разбегу могу придумать явно определяемый дубль лишь на уровне протокола)).
А чтобы фильтровать домены по нужным именно вам условиям, придется написать собственную логику.
Например, использовать класс System.Uri (перегонять в него строку, проверять, что строка действительно URL, сравнивать и т.д.) или разбирать каждую строку по разделителю / и работать с массивами — опять же, проверять, сравнивать или что там еще может быть нужно, после собирать массив опять в строку и работать с ней. Это на вскидку, не имея представления, что именно вам нужно и какие подвохи вы ожидаете от списка урлов

C#:
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0096561
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0097606
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0097780
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098023
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098219
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098637
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098650
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098749
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099330
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099367
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099408
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099890
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0100016
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0100493
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0100598
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0101035
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0101056

вот имеется 16 строк с одинаковым доменом , надо чтобы после фильтра осталась только 1 пофиг какая
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
C#:
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0096561
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0097606
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0097780
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098023
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098219
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098637
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098650
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0098749
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099330
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099367
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099408
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0099890
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0100016
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0100493
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0100598
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0101035
https://buecherei.weiz.at/DesktopModules/OCLC.OPEN.PL.DNN.SearchModule/permalink.aspx?TabId=50&id=0101056

вот имеется 16 строк с одинаковым доменом , надо чтобы после фильтра осталась только 1 пофиг какая
В этом конкретном случае, я бы смотрел в сторону System.Uri
 
  • Спасибо
Реакции: Alexmd

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
тоесть обычного решения через зенку не получится сделать ....
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
var list = project.Lists["список"];
list.AddRange(list.GetItems("All", true)
              .Where(x=>Uri.TryCreate(x, UriKind.Absolute, out Uri uriResult) && x.IsUriHttpOrHttps())
              .GroupBy(x=>new System.Uri(x).Host)
              .Select(x=>x.First()));
 
  • Спасибо
Реакции: semafor и kagorec

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
наверное что то в using прописать еще надо
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Да, кажется этот метод IsUriHttpOrHttps() появился лишь в последних версиях. Тогда код будет выглядеть по-другому.
C#:
var list = project.Lists["список"];
list.AddRange(list.GetItems("All", true)
              .Where(x=>Uri.TryCreate(x, UriKind.Absolute, out Uri uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
              .GroupBy(x=>new System.Uri(x).Host)
              .Select(x=>x.First()));
В принципе, это условие можно вообще опустить в конкретном случае.
 
  • Спасибо
Реакции: xatchikzzz

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Да, кажется этот метод IsUriHttpOrHttps() появился лишь в последних версиях. Тогда код будет выглядеть по-другому.
C#:
var list = project.Lists["список"];
list.AddRange(list.GetItems("All", true)
              .Where(x=>Uri.TryCreate(x, UriKind.Absolute, out Uri uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
              .GroupBy(x=>new System.Uri(x).Host)
              .Select(x=>x.First()));
В принципе, это условие можно вообще опустить в конкретном случае.
у меня версия 7,4 зенки ...
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Да, кажется этот метод IsUriHttpOrHttps() появился лишь в последних версиях. Тогда код будет выглядеть по-другому.
C#:
var list = project.Lists["список"];
list.AddRange(list.GetItems("All", true)
              .Where(x=>Uri.TryCreate(x, UriKind.Absolute, out Uri uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
              .GroupBy(x=>new System.Uri(x).Host)
              .Select(x=>x.First()));
В принципе, это условие можно вообще опустить в конкретном случае.
вообще супер Спасибо!
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)