Как модифицировать данный снипет

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

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Реакции
51
Баллы
28
C#:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["listSearchTextContains"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["SourceList"];
// ищем в каждой строчке в списке
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";

Данный снипет берет значение из переменной. А как сделать чтобы значение брал не из переменной а из списка? Причем, в списке будет не одна строка..
 
Последнее редактирование модератором:
  • Оценить
Реакции: CSS
Цель какая? Отфильтровать по блеклисту?
 
Цель какая? Отфильтровать по блеклисту?
Есть список, в котором есть ключевые слова. Берем по одному ключевику из списка и сравниваем со вторым списком, затем второй ключевик прогоняем по тому самому второму списку и.т.д., пока не попадется первый попавшийся ключ из списка1, после чего делаем break (выход), yes или no если не один ключ не совпал :-) или наоборот.

Кто поможет с решением?

Фуу... че-то там наковырял и заработало без всяких учебников)) Но код ужастен до жути о_О :D

Такая, знаешь, личная.
 
Последнее редактирование модератором:
как самый простой вариант, без Linq и т.д.
Код:
Развернуть Свернуть Копировать
// получаем список со строками поиска
var textList = project.Lists["textList"];
// получаем список, в котором будем искать
var sourceList = project.Lists["SourceList"];
lock(SyncObjects.ListSyncer)
{
    // проходим по каждому элементу списка со строками
    foreach(string textContains in textList)
    {
        // проходим по целевому списку, проверяя совпадение со строкой, взятой с первоначального списка
        for(int i=0; i < sourceList.Count; i++)
        {
            // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
            if (sourceList[i].Contains(textContains))
                return "yes";
        }
    }
}
// если ничего не нашли возвращаем "no"
return "no";
 
  • Оценить
Реакции: CSS и proffman
как самый простой вариант, без Linq и т.д.

Достаточно простой вариант, и кода поменьше чем я вчера намутил... :D

А как сделать тоже самое лишь наоборот, если хоть одна строка не совпадает то делаем no, а если все совпадают то выходим по yes?
 
Последнее редактирование модератором:
Код:
Развернуть Свернуть Копировать
// получаем список со строками поиска
var textList = project.Lists["textList"];
// получаем список, в котором будем искать
var sourceList = project.Lists["SourceList"];
lock(SyncObjects.ListSyncer)
{
    // проходим по каждому элементу списка со строками
    foreach(string textContains in textList)
    {
        // проходим по целевому списку, проверяя совпадение со строкой, взятой с первоначального списка
        for(int i=0; i < sourceList.Count; i++)
        {
            // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
            if (!sourceList[i].Contains(textContains))
                return "no";
        }
    }
}
// если ничего не нашли возвращаем "no"
return "yes";

ну там комменты только поправить :)
 
Последнее редактирование модератором:
  • Оценить
Реакции: CSS и proffman
Вчера тоже так делал !sourceList, был крайне удивлен почему не работало. Потом че-то там про unless нашел, думал ! в C# не работает, а оказывается причина была в списках. Очистил, по новой записал ключи и всё заработало :D
 

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