Есть ли слово в списке? Как узнать..

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

chazer24

Активный пользователь
Регистрация
26.03.2016
Сообщения
271
Реакции
49
Баллы
28
Друзья, подскажите.. Как выполняется поиск текста из txt файлика? Есть вообщем блек лист, нужно что бы зенно проверяла, есть ли моя переменная в этом блек листе.. Найти не могу через какой кубик это парсится..
 
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
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";

http://seodima.com/zennoposter-kak-proverit-nalichie-stroki-v-spiske/
 
  • Спасибо
Реакции: Hannes и chazer24
Так в разы быстрее:
C#:
Развернуть Свернуть Копировать
var list = project.Lists["Blacklist"];
string text = project.Variables["ПЕРЕМЕННАЯ С ТЕКСТОМ КОТОРЫЙ ИЩЕМ"].Value;
if (list.Contains(text)) {
   return "Найдено в блеклисте";
}
 
Спасибо ребят, выручили как всегда)
 
Через Обработка текста>Regex можно пропарсить текст, а текст из файла взять экшном работы с файлами - http://zennolab.com/wiki/ru:actions:files
Так гораздо проще. Не знаю почему все любят советовать код, в котором новички не разбираются.
 
Через Обработка текста>Regex можно пропарсить текст, а текст из файла взять экшном работы с файлами - http://zennolab.com/wiki/ru:actions:files
Так гораздо проще. Не знаю почему все любят советовать код, в котором новички не разбираются.
Если текст в котором мы ищем - это несколько десятков или сотни тысяч строк, такая регулярка будет гораздо дольше обрабатываться, нежели выше приведенный код.
 
  • Спасибо
Реакции: Dimionix
Через Обработка текста>Regex можно пропарсить текст, а текст из файла взять экшном работы с файлами - http://zennolab.com/wiki/ru:actions:files
Так гораздо проще. Не знаю почему все любят советовать код, в котором новички не разбираются.
Не разу не соглашусь, что так проще. Гораздо проще и быстрее - копипаст кода и понимать его не обязательно, да и не нужно это большинству. К тому же у кода много плюсов по сравнению с кучей кубиков.
 
Не разу не соглашусь, что так проще. Гораздо проще и быстрее - копипаст кода и понимать его не обязательно, да и не нужно это большинству.
Да, и так пользователи привыкают к сниппетам, и не учатся самостоятельно пользоваться программой.
Если текст в котором мы ищем - это несколько десятков или сотни тысяч строк, такая регулярка будет гораздо дольше обрабатываться, нежели выше приведенный код.
Удивлен) При выполнении в зеннопостере регулярка парсит в лет.
 
Да, и так пользователи привыкают к сниппетам, и не учатся самостоятельно пользоваться программой.
Ну таких малая часть, основная масса, в принципе, не учиться/не собирается учиться пользоваться ProjectMaker'ом, проще заказать проект или скопировать что-то с форума. К счастью, в большинстве случаев, на форуме всё уже есть. А вот научиться пользоваться "Поиском" не помешало бы многим.
 
Удивлен) При выполнении в зеннопостере регулярка парсит в лет.
Не поленился, провел эксперимент.
Поиск осуществлялся в 749 634 строках, в котором искомое слово было всего в одном экземпляре.

Через C# код это заняло: 0.0720217 секунд.
Через Обработку текста (Regex): 0.8330546 секунд.
Разница: 0.7610329 секунд. И это всего 1 итерация, при этом задача не самая сложная.

А теперь представим, что таких итераций 1000.
При обработке текста регулярным выражением мы потеряем 761.0329 секунд ~ 12.6 минут.

Достаточно показательный пример? :-)
 
  • Спасибо
Реакции: Juniorcpa и Alexander I
Не поленился, провел эксперимент.
Поиск осуществлялся в 749 634 строках, в котором искомое слово было всего в одном экземпляре.

Через C# код это заняло: 0.0720217 секунд.
Через Обработку текста (Regex): 0.8330546 секунд.
Разница: 0.7610329 секунд. И это всего 1 итерация, при этом задача не самая сложная.

А теперь представим, что таких итераций 1000.
При обработке текста регулярным выражением мы потеряем 761.0329 секунд ~ 12.6 минут.

Достаточно показательный пример? :-)
А добавь к этому список в 30 метров.
 
Не поленился, провел эксперимент.
В PM или в ZP?
Хотя, и так понятно, что поиск по регулярному выражению - не самый скоростной метод и если есть возможность избавиться от использования регулярок, то это очень хорошо.
 
да - по зелёной
нет - по красной

C#:
Развернуть Свернуть Копировать
return project.Lists["SourceList"].First(s=>s.Contains(project.Variables["Url"].Value));
 
Вот спорят....)
Код - это дополнительный функционал программы для продвинутых пользователей, а не основной функционал программы.
 
C#:
Развернуть Свернуть Копировать
return project.Lists["SourceList"].First(s=>s.Contains(project.Variables["Url"].Value));

Апну тему )

Поиск в списке идет по одному слову из переменной, каким образом можно сделать проверку по списку если в переменной несколько слов?
По очереди не очень хочется это делать, хотелось бы махом ))
 
По очереди не очень хочется это делать, хотелось бы махом ))
Если хочется махом, то можно объединить содержимое списка и искать в этом общем массиве данных.
 

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