Получение строки из списка содержащей текст C#

KiryaPerseus

Client
Регистрация
17.10.2017
Сообщения
160
Благодарностей
62
Баллы
28
Всем доброго времени суток, нашел вроде как рабочий сниппет на форуме
Выглядит он вот так

C#:
// берем из переменной текст, который надо искать
var textContains = project.Variables["переменная"].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";
Мне нужно не возвращать значение, а положить его в переменную
Я пытался переделать код под себя, но в таком формате он почему-то берет первое значение и всё
Что я сделал не так?


C#:
// берем из переменной текст, который надо искать
var textContains = project.Variables["Переменная"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["Список"];
var str = ""; // Вот тут объявил СТР заранее, т.к если объявлять в цикле, потом не могу её положить в переменную
// ищем в каждой строчке в списке
lock (SyncObjects.ListSyncer)
{
    for (int i = 0; i < sourceList.Count; i++)
    {
        // читаем строку из списка
        str = sourceList[i];
        // проверяем содержание текста в строке, если есть совпадение выходим из цикла
        if (str.Contains(textContains));
        break;
    }
}
project.Variables["Test"].Value = str; // Вот тут пытаюсь положить значение в переменную
Буду рад помощи в разъяснениях моих ошибок
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 509
Благодарностей
1 311
Баллы
113
C#:
// берем из переменной текст, который надо искать
var textContains = project.Variables["переменная"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["Список"];
// Блокируем таблицу, что бы другие потоки не прицепились вместе с нами
lock (SyncObjects.ListSyncer)
{
    // Делаем перебор по списку
    foreach (string value in sourceList)
    {
        // проверяем содержание текста в строке, если есть совпадение возвращаем "Нашли Совпадение!"
        if (value.Contains(textContains))
        {
            // Если нашли совпадение- возвращаем в Zenno переменную Test - найденное значение
            project.Variables["Test"].Value = value; // Вот тут пытаюсь положить значение в переменную
            // Пишем в лог сообщение и заканчиваем поиски
            return "Нашли Совпадение!";
        }
    }
}
// если ничего не нашли возвращаем "no"
return "no";
 
Последнее редактирование:
  • Спасибо
Реакции: KiryaPerseus и Ilshakin

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
C#:
if (value.Contains(textContains)) // если взятая из списка строка содержит слово из переменной
{
project.Variables["Test"].Value = str; // тогда мы положим эту строку в новую переменную
break; // и уже после того, как положили строку в новую переменную - закончим цикл
}

а можно и по другому сделать:

C#:
project.Variables["переменная для сохраниения"].Value = project.Lists["лист в котором будем искать"].Where(x => x.Contains(project.Variables["переменная со словом"].Value)).First();
 
  • Спасибо
Реакции: KiryaPerseus

aikostes

Client
Регистрация
08.09.2020
Сообщения
32
Благодарностей
1
Баллы
8
Доброй ночи друзья, помогите пожалуйста, данные методы + родные зенки методы, выдают не совсем точно нужно, приведу пример:

В списке котором я ищу есть значения:


U33
U32


Если я проверяю есть ли в списке U3 - ответ должен быть нет, ведь его там нет
но все способы указывают что есть - и находит например U33, помогите обойти это
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 641
Баллы
113
выбрать "удовлетворяет регулярному выражению. Искать ^U3$
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 786
Благодарностей
2 450
Баллы
113
Доброй ночи друзья, помогите пожалуйста, данные методы + родные зенки методы, выдают не совсем точно нужно, приведу пример:

В списке котором я ищу есть значения:


U33
U32


Если я проверяю есть ли в списке U3 - ответ должен быть нет, ведь его там нет
но все способы указывают что есть - и находит например U33, помогите обойти это
Возможно необходимо искать по полному совпадению, а не по частичному - тогда будет срабатывать так как нужно.

Как-то так подсчитать количество строк с полным совпадением:
C#:
var list = project.Lists["list"].ToList();
return list.Count(x=>x=="U32") > 0;
Как-то так сделать выборку строк с полным совпадением:
C#:
var list = project.Lists["list"].ToList();

return string.Join("\r\n", list.Where(x=>x=="U32").ToList());
 
  • Спасибо
Реакции: doc

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