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

  • Автор темы Автор темы Gizmond
  • Дата начала Дата начала

Gizmond

Client
Регистрация
18.02.2017
Сообщения
275
Реакции
56
Баллы
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
 

Вложения

  • 1647941934904.png
    1647941934904.png
    37,8 KB · Просмотры: 131
  • test project.zp
    test project.zp
    15,4 KB · Просмотры: 109
вместо listAll.Contains(domain) надо сделать цикл перебора по списку listAll , получать каждую строку и делать Contains по этой строке.
по списку Contains ищет полное вхождение строк.
 
вместо 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 + "  добавили в список");
            }
        }
        
    }
 
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
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");
    }
}

Спасибо , отрабатывает хорошо)
 

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