10 блэклистов

bstshell

Client
Регистрация
03.06.2015
Сообщения
56
Благодарностей
4
Баллы
8
Друзья! Сразу говорю в программировании я полный ноль. На форуме нашел код для проверки переменной на наличие в списке:

Код:
// берем из переменной текст, который надо искать
var textContains = project.Variables["ID"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["невыполнимые задания"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}
// если ничего не нашли возвращаем "no"
return "no";
Кто шарит подскажите как изменить код, чтобы он проверял не 1 а сразу несколько списков (5-10) и если хотя бы в одном находил переменную выдавал "есть", в противном случае "нет"

Заранее спасибо за помощь!
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
Код:
// берем из переменной текст, который надо искать
var textContains = project.Variables["ID"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["невыполнимые задания"];
var sourceList1 = project.Lists["невыполнимые задания1"];
var sourceList2 = project.Lists["невыполнимые задания2"];
//...
var sourceList10 = project.Lists["невыполнимые задания10"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}


lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList1.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList1[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList2.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList2[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}

//...

lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList10.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList10[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}


// если ничего не нашли возвращаем "no"
return "no";
 
  • Спасибо
Реакции: bstshell

bstshell

Client
Регистрация
03.06.2015
Сообщения
56
Благодарностей
4
Баллы
8
большое спасибо, попозже попробую отпишу)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
C#:
// Текст, который надо искать
var textContains = project.Variables["Текст"].Value;
// Списки, в которых будем искать
var list1 = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
// ...
var list10 = project.Lists["Список 10"];

// Создаем темповый список
List<string> tmpList = new List<string>();
// Добавляем в него все списки
tmpList.AddRange(list1);
tmpList.AddRange(list2);
// ...
tmpList.AddRange(list10);

lock(SyncObjects.ListSyncer)
{
    for (int i = 0; i < tmpList.Count; i++)
    {
        // читаем строку из списка
        var str = tmpList[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}
// если ничего не нашли возвращаем "no"
return "no"; // как вариант, если эту строку заменить на "return null;" (без кавычек), выход из экшена будет по красной стрелке
 

bstshell

Client
Регистрация
03.06.2015
Сообщения
56
Благодарностей
4
Баллы
8
и вам спасибо)
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Я бы цикл в цикле сделал. Мало ли, может нужно знать в каком списке найдено совпадение. И код был бы читабельный и короткий.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Я бы цикл в цикле сделал. Мало ли, может нужно знать в каком списке найдено совпадение. И код был бы читабельный и короткий.
Согласен, но просто не стал заморачиваться, т.к. задачи с выявлением списка, в котором есть совпадение, не стояло.
С циклом в цикле, как я понимаю, нужно было бы еще создавать массив в массиве. Или, @Astraport, Вы бы как-то по другому сделали, а то я что-то завис.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Можно заранее создать отдельный список с именами списков блэк-листов.
А потом в первом цикле обращаться к ним по очереди
Код:
project.Lists[project.Lists[i]]
и вторым циклом уже крутить выбранный цикл. Всего 10 строк получится.
 
  • Спасибо
Реакции: Dimionix

bstshell

Client
Регистрация
03.06.2015
Сообщения
56
Благодарностей
4
Баллы
8
C#:
// Текст, который надо искать
var textContains = project.Variables["Текст"].Value;
// Списки, в которых будем искать
var list1 = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
// ...
var list10 = project.Lists["Список 10"];

// Создаем темповый список
List<string> tmpList = new List<string>();
// Добавляем в него все списки
tmpList.AddRange(list1);
tmpList.AddRange(list2);
// ...
tmpList.AddRange(list10);

lock(SyncObjects.ListSyncer)
{
    for (int i = 0; i < tmpList.Count; i++)
    {
        // читаем строку из списка
        var str = tmpList[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}
// если ничего не нашли возвращаем "no"
return "no"; // как вариант, если эту строку заменить на "return null;" (без кавычек), выход из экшена будет по красной стрелке
Спасибо, все работает, а как можно сделать чтобы искал только 100% совпадение?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
  • Спасибо
Реакции: bstshell

bstshell

Client
Регистрация
03.06.2015
Сообщения
56
Благодарностей
4
Баллы
8
Большое вам спасибо, очень помогли!
 

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