Положить значение в переменную в спиннете

[Pacman]

Client
Регистрация
29.05.2017
Сообщения
279
Благодарностей
168
Баллы
43
Добрый день формчане, подскажите пожалуйста.
Есть спиннет проверки наличия заданного текста.
Код:
// берем из переменной текст, который надо искать
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";
return "yes";
return "no";


Нужно что бы на выходе не возвращало значение куда-то(непонятно куда), а присваивало переменной textContains 1 или 0.

То есть понимаю вместо return "yes"; нужно написать что присвоить значение "textContains =1"
Подскажите как это сделать.
 

SHELBY

Client
Регистрация
09.09.2016
Сообщения
237
Благодарностей
291
Баллы
63
Переменная в ZP?
C#:
project.Variables["textContains"].Value = "1";
Вместо return
 
  • Спасибо
Реакции: [Pacman]

[Pacman]

Client
Регистрация
29.05.2017
Сообщения
279
Благодарностей
168
Баллы
43
Переменная в ZP?
C#:
project.Variables["textContains"].Value = "1";
Вместо return
К сожалению в таком виде спиннет не работает
// берем из переменной текст, который надо искать
var textContains = project.Variables["dd"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["список"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
for(int i=0; i < sourceList.Count; i++)
{
// читаем строку из списка
var str = sourceList;
// проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
{ if (str == textContains)
project.Variables["prmn"].Value = "1";
}
}
}
// если ничего не нашли возвращаем "no"
project.Variables["prmn"].Value = "0";


Всегда выполняется project.Variables["prmn"].Value = "0";
 

SHELBY

Client
Регистрация
09.09.2016
Сообщения
237
Благодарностей
291
Баллы
63
C#:
// берем из переменной текст, который надо искать
var textContains = project.Variables["listSearchTextContains"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["spis"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
   for(int i=0; i < sourceList.Count; i++)
   {
       // читаем строку из списка
       var str = sourceList[i];
       // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
       if (str.Contains(textContains))
           project.Variables["textContains"].Value = "1";
   }
}
// если ничего не нашли возвращаем "no"
project.Variables["textContains"].Value = "0";
У вас отрабатывает участок кода:
C#:
lock(SyncObjects.ListSyncer)
{
   for(int i=0; i < sourceList.Count; i++)
   {
       // читаем строку из списка
       var str = sourceList[i];
       // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
       if (str.Contains(textContains))
           project.Variables["textContains"].Value = "1";
   }
}
В нем присваивается project.Variables["textContains"].Value = "1";

Но, потом идет выход из цикла, разблокировка потока и присваивается project.Variables["textContains"].Value = "0";

Попробуйте убрать последнюю строку. А в начало добавьте project.Variables["textContains"].Value = "";

Тем самым получится, при каждом выполнении сниппета: очистка переменной textContains
Если ничего не найдено, переменная textContains остается пустой
Если найдено, в переменную textContains заносится 1

Финальный код:
C#:
project.Variables["textContains"].Value = "";

// берем из переменной текст, который надо искать
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))
           project.Variables["textContains"].Value = "1";
   }
}
 
Последнее редактирование:
  • Спасибо
Реакции: [Pacman]

[Pacman]

Client
Регистрация
29.05.2017
Сообщения
279
Благодарностей
168
Баллы
43
C#:
// берем из переменной текст, который надо искать
var textContains = project.Variables["listSearchTextContains"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["spis"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
   for(int i=0; i < sourceList.Count; i++)
   {
       // читаем строку из списка
       var str = sourceList[i];
       // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
       if (str.Contains(textContains))
           project.Variables["textContains"].Value = "1";
   }
}
// если ничего не нашли возвращаем "no"
project.Variables["textContains"].Value = "0";
У вас отрабатывает участок кода:
C#:
lock(SyncObjects.ListSyncer)
{
   for(int i=0; i < sourceList.Count; i++)
   {
       // читаем строку из списка
       var str = sourceList[i];
       // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
       if (str.Contains(textContains))
           project.Variables["textContains"].Value = "1";
   }
}
В нем присваивается project.Variables["textContains"].Value = "1";

Но, потом идет выход из цикла, разблокировка потока и присваивается project.Variables["textContains"].Value = "0";

Попробуйте убрать последнюю строку. А в начало добавьте project.Variables["textContains"].Value = "";

Тем самым получится, при каждом выполнении сниппета: очистка переменной textContains
Если ничего не найдено, переменная textContains остается пустой
Если найдено, в переменную textContains заносится 1

Финальный код:
C#:
project.Variables["textContains"].Value = "";

// берем из переменной текст, который надо искать
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))
           project.Variables["textContains"].Value = "1";
   }
}
Большое спасибо! Заработало. Разве что подставил project.Variables["textContains"].Value = "0"; для верности.
 
  • Спасибо
Реакции: SHELBY

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