Этот код работал. Сейчас при тех же самых настройках шаблона он все время отдает False вне зависимости от того находится ли в переменной попадающееся в списке значение или нет.
Этот код работал. Сейчас при тех же самых настройках шаблона он все время отдает False вне зависимости от того находится ли в переменной попадающееся в списке значение или нет.
IZennoList List = project.Lists["blacklist"]; // тут указываем свой список, а в переменной "Url" должна быть наша ссылка для проверки
lock(SyncObjects.ListSyncer)
{
for(int i = 0; i < List.Count; i++) {
if (project.Variables["newusers"].Value.Contains(List[i])) {
return true;
}
}
return false; // мы ранее пролистали весь список и не нашли совпадения
}
IZennoList List = project.Lists["blacklist"]; // тут указываем свой список, а в переменной "Url" должна быть наша ссылка для проверки
lock(SyncObjects.ListSyncer)
{
for(int i = 0; i < List.Count; i++) {
if (project.Variables["newusers"].Value.Contains(List[i])) {
return true;
}
}
return false; // мы ранее пролистали весь список и не нашли совпадения
}
логика вроде нормальная для неточного совпадения. Должно работать. Можешь привести значения, которые должны совпасть, но не совпадают? Ты сравнивал эти значения как-то иначе, не через код например? Может там невидмые символы, или местами кириллица вместо латиницы и т.д.
А присваиваешь просто руками написав/скопировав? Попробуй через экшн работы со списками взять это значение в переменную через номер строки. И с ней уже отработать сниппет
А почему логика обратная?
Я не буду утверждать, но у меня циклы в прошлом шаблоне из-за такого рассыпались в пух и прах. Только когда полностью исправил логику [включая именно порядок переменных в сравнении.Contains()] - всё заработало (но я так и не понял в чем дело). В целом вроде сути менять не должно, я сам это понимаю, ну а вдруг...
У меня было 2 листа для сравнения, в каждом по 8 элементов. Я сравнивал эти списки contains, чтобы вытянуть значение, из таблицы, соответствующее совпадению, только другой ячейки. Сравнивал 2й столбец, а брал результат из 1го, если contains == true.
Итогом было не 8 строк, а .... 37!!! Я заколебался искать причину, но в итоге всё исправилось, когда .Contains перевернул в правильную сторону. Может было что-то ещё, но я его подозревал с самого начала... Вот такая вот сказочка.
C#:
if (List[i].Contains(project.Variables["newusers"].Value) {
return true;
break;
}
А ещё мне кажется что "пролистали весь список и не нашли совпадений" это не просто false вне цикла... Но утверждать не буду (опять))).
Вместо return надо выполнить какую-то функцию, которая будет определяться по результату.
1) проверяешь есть ли каждый newuser в одном из List; нет - берешь следующий ; есть - записываешь куда-нибудь что элемент есть и прерываешь цикл;
2) после выхода из цикла сравнение результатов опять IF
(0 - не было совпадений(напр. пустоту, и эту переменную перед циклом очистить)) - выполняешь одно
(1 - есть совпадение - выполняешь что нужно);
// берем из переменной текст, который надо искать
var textContains = project.Variables["post_id"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["black"];
// ищем в каждой строчке в списке
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";
// берем из переменной текст, который надо искать
var textContains = project.Variables["post_id"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["black"];
// ищем в каждой строчке в списке
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";