https://community.bablosoft.com/topic/5471/баг-с-использованием-очистить-поле/2
Проблемы с функционалом "Списков"
-
Всем привет, проблема скорее в моем не знании целиком инструментария "BAS" и то как это реализовать. Но так как я потратил поиск решения уже достаточно времени и так как есть форум решил попробовать через него решить данную проблему.
Есть список с значениями:
lorem lorem true lorem lorem
lorem. lorem false - lorem lorem
lorem = lorem, lorem, lorem
loremtruelorem lorem loremнужно из списка удалить все строки в которых есть слово (или которые встречают слово "true")
на сколько понимаю у BAS есть такая функция в списке "Удалить По Значению" - и там вводиться само значение, как я понял по точному соответствию, но проблема в том что слово "true" встречаются в не точном соответствие и может быть окружено другие словами. Тут как я понимаю нужно использовать метод "expression" и через JAVAScript как то это решать (мне так кажется) , но яву я к сожалению пока не на столько хорошо изучил.
Может есть другой способ или каким должен быть код что бы в списке удалять строку содержащую текст именно через "Удалить По Значению"?
Спасибо за понимание! -
@snifram said in Проблемы с функционалом "Списков":
Всем привет, проблема скорее в моем не знании целиком инструментария "BAS" и то как это реализовать. Но так как я потратил поиск решения уже достаточно времени и так как есть форум решил попробовать через него решить данную проблему.
Есть список с значениями:
lorem lorem true lorem lorem
lorem. lorem false - lorem lorem
lorem = lorem, lorem, lorem
loremtruelorem lorem loremнужно из списка удалить все строки в которых есть слово (или которые встречают слово "true")
на сколько понимаю у BAS есть такая функция в списке "Удалить По Значению" - и там вводиться само значение, как я понял по точному соответствию, но проблема в том что слово "true" встречаются в не точном соответствие и может быть окружено другие словами. Тут как я понимаю нужно использовать метод "expression" и через JAVAScript как то это решать (мне так кажется) , но яву я к сожалению пока не на столько хорошо изучил.
Может есть другой способ или каким должен быть код что бы в списке удалять строку содержащую текст именно через "Удалить По Значению"?
Спасибо за понимание!Используйте действие "Foreach" для перебора списка и действие "Содержит" в модуле "Строка", что бы определить содержится ли нужная строка в элементе списка или нет
-
@Fox said in Проблемы с функционалом "Списков":
@snifram said in Проблемы с функционалом "Списков":
Всем привет, проблема скорее в моем не знании целиком инструментария "BAS" и то как это реализовать. Но так как я потратил поиск решения уже достаточно времени и так как есть форум решил попробовать через него решить данную проблему.
Есть список с значениями:
lorem lorem true lorem lorem
lorem. lorem false - lorem lorem
lorem = lorem, lorem, lorem
loremtruelorem lorem loremнужно из списка удалить все строки в которых есть слово (или которые встречают слово "true")
на сколько понимаю у BAS есть такая функция в списке "Удалить По Значению" - и там вводиться само значение, как я понял по точному соответствию, но проблема в том что слово "true" встречаются в не точном соответствие и может быть окружено другие словами. Тут как я понимаю нужно использовать метод "expression" и через JAVAScript как то это решать (мне так кажется) , но яву я к сожалению пока не на столько хорошо изучил.
Может есть другой способ или каким должен быть код что бы в списке удалять строку содержащую текст именно через "Удалить По Значению"?
Спасибо за понимание!Используйте действие "Foreach" для перебора списка и действие "Содержит" в модуле "Строка", что бы определить содержится ли нужная строка в элементе списка или нет
и если содержит "true" то удаляем - спасибо
на сколько понял еще один из способов это через выполнение кода "[[URL_LIST_FINAL]] = [[URL_LIST_FINAL]].filter(function(a){return a.toLowerCase().indexOf("https://m.me") < 0 && a.toLowerCase().indexOf("skype.com") < 0 && a.toLowerCase().indexOf("twitter.com") < 0})" и тд , но как понимаю если скрипт многопоточный и список большой может положить сам BAS уже
-
@snifram said in Проблемы с функционалом "Списков":
и если содержит "true" то удаляем - спасибо
на сколько понял еще один из способов это через выполнение кода "[[URL_LIST_FINAL]] = [[URL_LIST_FINAL]].filter(function(a){return a.toLowerCase().indexOf("https://m.me") < 0 && a.toLowerCase().indexOf("skype.com") < 0 && a.toLowerCase().indexOf("twitter.com") < 0})" и тд , но как понимаю если скрипт многопоточный и список большой может положить сам BAS уже
Не положит, это буквально тоже самое, только через js
-
@Fox said in Проблемы с функционалом "Списков":
@snifram said in Проблемы с функционалом "Списков":
и если содержит "true" то удаляем - спасибо
на сколько понял еще один из способов это через выполнение кода "[[URL_LIST_FINAL]] = [[URL_LIST_FINAL]].filter(function(a){return a.toLowerCase().indexOf("https://m.me") < 0 && a.toLowerCase().indexOf("skype.com") < 0 && a.toLowerCase().indexOf("twitter.com") < 0})" и тд , но как понимаю если скрипт многопоточный и список большой может положить сам BAS уже
Не положит, это буквально тоже самое, только через js
принял, спасибо!
-
данная функция очень понравилась))) спасибо , не стал создавать новую тему решил в этой спросить
а как по аналогии сделать в обратную сторону "[[URL_LIST_FINAL]] = [[URL_LIST_FINAL]].filter(function(a){return a.toLowerCase().indexOf("https://m.me") < 0 && a.toLowerCase().indexOf("skype.com") < 0 && a.toLowerCase().indexOf("twitter.com") < 0})" - так удалит все строки в которых есть или встречаются заданные элементы
а как оставить эти строки а удалить остальные которые не встречают перечисленные элементы
Спасибо заранее -
Прошу прощения - до самого дошло что вопрос в операторах
Для реализации функционала, который оставляет только строки, содержащие хотя бы одно из указанных значений в indexOf("..."), нужно инвертировать логическое условие. Вместо проверки на отсутствие всех указанных подстрок, мы будем проверять наличие хотя бы одной из них.
Вот соответствующий код:
[[FINAL_LIST]] = [[FINAL_LIST]].filter(function(a) {
return a.toLowerCase().indexOf("background:") >= 0 ||
a.toLowerCase().indexOf("#") >= 0 ||
a.toLowerCase().indexOf("width:") >= 0 ||
a.toLowerCase().indexOf("margin-right:") >= 0 ||
a.toLowerCase().indexOf(";") >= 0 ||
a.toLowerCase().indexOf("=>") >= 0 ||
a.toLowerCase().indexOf(">") >= 0 ||
a.toLowerCase().indexOf(")") >= 0 ||
a.toLowerCase().indexOf("e.json") >= 0 ||
a.toLowerCase().indexOf("(") >= 0 ||
a.toLowerCase().indexOf("height:") >= 0 ||
a.toLowerCase().indexOf("color:") >= 0 ||
a.toLowerCase().indexOf("content:") >= 0 ||
a.toLowerCase().indexOf("gtag.js") >= 0 ||
a.toLowerCase().indexOf("cloudflare") >= 0 ||
a.toLowerCase().indexOf("cdn-cgi") >= 0;
});
Объяснение изменений:
Инверсия условия : В оригинальной функции использовались операторы < 0 для исключения строк, содержащих определенные подстроки. Здесь мы заменили их на >= 0, чтобы включить строки, содержащие эти подстроки.
Логическое "или" (||) : Для того чтобы строка проходила фильтрацию, достаточно, чтобы она содержала хотя бы одну из указанных подстрок. Поэтому используем оператор || между условиями.
Синтаксис сохранен : Структура и стиль кода полностью соответствуют вашему примеру.
Теперь этот код оставит только те строки, которые содержат хотя бы одну из указанных подстрок. Все остальные строки будут удалены.