Перестала работать проверка по блэклисту.

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
Версия ZennoPoster'a 5.35.1.0 перестала работать проверка значения переменной на наличие в блэклисте с помощью C# сниппета:

IZennoList List = project.Lists["blacklist"];
lock(SyncObjects.ListSyncer)
{
for(int i = 0; i < List.Count; i++) {
if (project.Variables["newusers"].Value.Contains(List)) {
return true;
}
}
return false;
}


Подскажите в каком направлении смотреть ?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 649
Благодарностей
4 618
Баллы
113
а там не должно быть List в цикле вместо List?

и на будущее, если что-то не работает, стоит описывть как именно оно не работает
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
Только что хотел отредактировать первый пост.

Извините не понял вопроса:
а там не должно быть List в цикле вместо List?
Этот код работал. Сейчас при тех же самых настройках шаблона он все время отдает False вне зависимости от того находится ли в переменной попадающееся в списке значение или нет.
 

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
То что кусок кода курсивом получился это я видимо криво под спойлер убрал. В оригинале код в UTF-8 выглядит нормально.
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
То что кусок кода курсивом получился это я видимо криво под спойлер убрал. В оригинале код в UTF-8 выглядит нормально.
Дело не в курсиве.
В условии ошибка, должно быть List, а не List
if (project.Variables["newusers"].Value.Contains(List))
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 649
Благодарностей
4 618
Баллы
113
  • Спасибо
Реакции: SergSh

doc

Client
Регистрация
30.03.2012
Сообщения
8 649
Благодарностей
4 618
Баллы
113
Только что хотел отредактировать первый пост.

Извините не понял вопроса:


Этот код работал. Сейчас при тех же самых настройках шаблона он все время отдает False вне зависимости от того находится ли в переменной попадающееся в списке значение или нет.
запости свой код используя форумную кнопку "вставить" -- "Код"
 

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
C#:
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; // мы ранее пролистали весь список и не нашли совпадения
}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 649
Благодарностей
4 618
Баллы
113
C#:
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; // мы ранее пролистали весь список и не нашли совпадения
}
логика вроде нормальная для неточного совпадения. Должно работать. Можешь привести значения, которые должны совпасть, но не совпадают? Ты сравнивал эти значения как-то иначе, не через код например? Может там невидмые символы, или местами кириллица вместо латиницы и т.д.
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

doc

Client
Регистрация
30.03.2012
Сообщения
8 649
Благодарностей
4 618
Баллы
113

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
Можешь привести значения, которые должны совпасть, но не совпадают?
Ну например в списке blacklist есть имя Rob я присваиваю переменной это значение. Проверяю сработку снипппета а он отдает False
 

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
Попробую на 5.33 откатиться и там проверить.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 649
Благодарностей
4 618
Баллы
113
Ну например в списке blacklist есть имя Rob я присваиваю переменной это значение. Проверяю сработку снипппета а он отдает False
А присваиваешь просто руками написав/скопировав? Попробуй через экшн работы со списками взять это значение в переменную через номер строки. И с ней уже отработать сниппет
 

bushido

Client
Регистрация
11.02.2017
Сообщения
10
Благодарностей
1
Баллы
3
Спасибо попробую. На 5.33 тоже отдает False в любом случае. На свежую голову еще поковыряюсь.
 

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Спасибо попробую. На 5.33 тоже отдает 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 - есть совпадение - выполняешь что нужно);

Так будет(должно) и во внешнем цикле работать.
 
Последнее редактирование:

Spikers07

Client
Регистрация
25.05.2016
Сообщения
121
Благодарностей
54
Баллы
28
Код:
// берем из переменной текст, который надо искать
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";
 

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Код:
// берем из переменной текст, который надо искать
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";
И теперь объяснить человеку что yes и no - это то, про что я говорил) и надо правильно применить)
 

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