Поиск значения в списке c#

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
Всем привет. Есть такой кусок с проекта. Мне его нужно завернуть в c# с использованием lock , так как работа будет с файлом.

Накидал код и у меня возникла проблема на этом экшене ( на скрине указал) . listAll.Contains(domain) - данный вариант ищет точное совпадение. И он не отрабатывает.

Мне нужно сравнивать значение из списка 1 в списке 2 , и если находится значение в списке 2 , мне нужно добавлять счетчик к строке(список 2)

Я ищу значение через listAll.Contains(domain), но данный вариант ищет точное совпадение. И если в списке 2 значение yandex.ru,0 , а я ищу yandex.ru , то он его не находит.

Приложил код и шаблон.

C#:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = false;
var regexGroups = Macros.TextProcessing.Regex(text, @"(?<=http(|s)://)[\w\W]*?(?=/)");
if (regexGroups.Count == 0)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    //добаляем в список все совпадения и удаляем дубли
    project.Lists["domain"].AddRange(regexGroups.Select(g => g.FirstOrDefault()));
    var temp_lst = project.Lists["domain"].Distinct().ToList();
    project.Lists["domain"].Clear();
    project.Lists["domain"].AddRange(temp_lst);
}

   
    while (project.Lists["domain"].Count() != 0)
     {
        var listAll = project.Lists["domain_all"];
         string domain = project.Lists["domain"][0].Trim(); // получаем строку
        project.Lists["domain"].RemoveAt(0); // удаляем строку из списка
        text = project.ExecuteMacro(domain);
        domain = Macros.TextProcessing.Replace(text, "www.", "", "Text", "All"); //удаляем www
       
       
        //тут нужно проверить есть ли значение в списке domain_all (listAll)
        //если значение не наъодим , то добавляем значение domain в список domains_all в таком виде (domain,0)
       
        //если находим , то добавляем счетчик к значению в списке domain_all в таком видео (domain,1)
        //т.е каждое совпадение добавляет +1 к счетчику
       
        if(listAll.Contains(domain))
        {
            //тут код с добавлением счетчика в список
        }
        else
        {
            listAll.Add(domain + ",0");
        }
89739
 

Вложения

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
вместо listAll.Contains(domain) надо сделать цикл перебора по списку listAll , получать каждую строку и делать Contains по этой строке.
по списку Contains ищет полное вхождение строк.
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
вместо listAll.Contains(domain) надо сделать цикл перебора по списку listAll , получать каждую строку и делать Contains по этой строке.
по списку Contains ищет полное вхождение строк.
Сделал как написали , но что то пошло не так у меня ) Ну и перед проверкой добавляю строку в список, потому что for не работает когда список пуст.

И вот что в списке добавляется, получается повторы добавляются , хотя по идеи если найдено совпадение, то просто должно в лог . Видимо ошибка в коде

89741


C#:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = false;
var regexGroups = Macros.TextProcessing.Regex(text, @"(?<=http(|s)://)[\w\W]*?(?=/)");
if (regexGroups.Count == 0)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    //добаляем в список все совпадения и удаляем дубли
    project.Lists["domain"].AddRange(regexGroups.Select(g => g.FirstOrDefault()));
    var temp_lst = project.Lists["domain"].Distinct().ToList();
    project.Lists["domain"].Clear();
    project.Lists["domain"].AddRange(temp_lst);
    temp_lst.Clear();
}

    
    while (project.Lists["domain"].Count() != 0)
     {
        var listAll = project.Lists["domain_all"];
         string domain = project.Lists["domain"][0].Trim(); // получаем строку
        project.Lists["domain"].RemoveAt(0); // удаляем строку из списка
        text = project.ExecuteMacro(domain);
        domain = Macros.TextProcessing.Replace(text, "www.", "", "Text", "All"); //удаляем www
        
        
        //тут нужно проверить есть ли значение в списке domain_all (listAll)
        //если значение не наъодим , то добавляем значение domain в список domains_all в таком виде (domain,0)
        
        //если находим , то добавляем счетчик к значению в списке domain_all в таком видео (domain,1)
        //т.е каждое совпадение добавляет +1 к счетчику
        
        
        if(listAll.Count == 0)
        {
            listAll.Add("test");
        }
        
        
        for (int x=0; listAll.Count>x;x++)
        {
            if(listAll[x].Contains(domain))
            {
                project.SendInfoToLog(listAll[x] + " нашли совпадение");
                //код с добавлением счетчика
            }
            else
            {
                listAll.Add(domain + ",0");
                project.SendInfoToLog(domain + "  добавили в список");
            }
        }
        
    }
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
C#:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = false;
var regexGroups = Macros.TextProcessing.Regex(text, @"(?<=http(|s)://)[\w\W]*?(?=/)");
if (regexGroups.Count == 0)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    //добаляем в список все совпадения и удаляем дубли
    project.Lists["domain"].AddRange(regexGroups.Select(g => g.FirstOrDefault()));
    var temp_lst = project.Lists["domain"].Distinct().ToList();
    project.Lists["domain"].Clear();
    project.Lists["domain"].AddRange(temp_lst);
}

var listDomain = project.Lists["domain"];
var allDomain = project.Lists["domain_all"];
while(listDomain.Count != 0)
{
    //получаем случайную строку, удаляем, убираем www
    int sluch = new Random().Next(0, listDomain.Count);
    var str = listDomain[sluch];
    listDomain.RemoveAt(sluch);
    str = str.Replace("www", "");
    
    //развилка
    var searchCoincidence = allDomain.Where(s=> s.Contains(str)).ToList();
    if(searchCoincidence.Count > 0)
    {
        string strFromAllDomains = searchCoincidence[0];
        allDomain.Remove(strFromAllDomains);
        string[] mass = strFromAllDomains.Split(',');
        if(mass.Length > 0)
        {
            try
            {
                string check = mass[0];
                int countPlusOne = Convert.ToInt32(mass[1]) + 1;
                
                allDomain.Add($"{check},{countPlusOne.ToString()}");
            }
            catch
            {
                throw new Exception("error");
            }
            
        }
    }
    else
    {
        allDomain.Add(str + ",0");
    }
}
 
  • Спасибо
Реакции: Gizmond

Gizmond

Client
Регистрация
18.02.2017
Сообщения
270
Благодарностей
53
Баллы
28
C#:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = false;
var regexGroups = Macros.TextProcessing.Regex(text, @"(?<=http(|s)://)[\w\W]*?(?=/)");
if (regexGroups.Count == 0)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    //добаляем в список все совпадения и удаляем дубли
    project.Lists["domain"].AddRange(regexGroups.Select(g => g.FirstOrDefault()));
    var temp_lst = project.Lists["domain"].Distinct().ToList();
    project.Lists["domain"].Clear();
    project.Lists["domain"].AddRange(temp_lst);
}

var listDomain = project.Lists["domain"];
var allDomain = project.Lists["domain_all"];
while(listDomain.Count != 0)
{
    //получаем случайную строку, удаляем, убираем www
    int sluch = new Random().Next(0, listDomain.Count);
    var str = listDomain[sluch];
    listDomain.RemoveAt(sluch);
    str = str.Replace("www", "");
   
    //развилка
    var searchCoincidence = allDomain.Where(s=> s.Contains(str)).ToList();
    if(searchCoincidence.Count > 0)
    {
        string strFromAllDomains = searchCoincidence[0];
        allDomain.Remove(strFromAllDomains);
        string[] mass = strFromAllDomains.Split(',');
        if(mass.Length > 0)
        {
            try
            {
                string check = mass[0];
                int countPlusOne = Convert.ToInt32(mass[1]) + 1;
               
                allDomain.Add($"{check},{countPlusOne.ToString()}");
            }
            catch
            {
                throw new Exception("error");
            }
           
        }
    }
    else
    {
        allDomain.Add(str + ",0");
    }
}
Спасибо , отрабатывает хорошо)
 

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