Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

22 Январь 2022, 20:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Нужно оставить урлы, в которые входят домены из списка.  (Прочитано 1846 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 845



« Ответ #30: 14 Январь 2022, 18:25 »

Через раз работает, например, вот: https://i2.piccy.info/i9/dc8eaed246c50538607d88f4a1f14e37/1642168952/163764/1454798/454.png
@Mric, на Вашей картинке показан верный результат.
10000 – это много и долго. Но Вы ведь не сформулировали задачу сразу в полном объёме.


Updated:
По скорости приемлемо. Но ведь это Вы должны попробовать на реальных данных и нам сказать: быстро или нет.
Обычно нет необходимости оптимизировать такие задачи...
А для того, чтобы учитывать сортировку доменов (и сразу выходить из цикла поиска), надо знать с какой позиции начинать сравнение входящего фрагмента (домена). Сейчас, да, сравнение идёт по всей строке до конца (оператор Like: "URL" Like "*" & domain & "*").
Мы можем ответить на вопрос: с какой позиции строго следует наименование домена в строке? После "https://"?

* formula-urls-contains (2).ods (42.17 Кб - загружено 5 раз.)
« Последнее редактирование: 14 Январь 2022, 23:30 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 845



« Ответ #31: 14 Январь 2022, 23:33 »

Поиск по отсортированному списку намного быстрее, некоторые функции Calc это умеют.
Как я понимаю, если мы к функции поиска добавим * (или: .*) справа, но не слева. В общем, надо зафиксировать положение входящей подстроки в самой строке.
Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #32: 17 Январь 2022, 10:13 »

Через раз работает, например, вот: https://i2.piccy.info/i9/dc8eaed246c50538607d88f4a1f14e37/1642168952/163764/1454798/454.png
@Mric, на Вашей картинке показан верный результат.
10000 – это много и долго. Но Вы ведь не сформулировали задачу сразу в полном объёме.


Updated:
По скорости приемлемо. Но ведь это Вы должны попробовать на реальных данных и нам сказать: быстро или нет.
Обычно нет необходимости оптимизировать такие задачи...
А для того, чтобы учитывать сортировку доменов (и сразу выходить из цикла поиска), надо знать с какой позиции начинать сравнение входящего фрагмента (домена). Сейчас, да, сравнение идёт по всей строке до конца (оператор Like: "URL" Like "*" & domain & "*").
Мы можем ответить на вопрос: с какой позиции строго следует наименование домена в строке? После "https://"?

Нет, там может быть как http, так и https и еще прибавляться www.

Как верный, а domain7 и domain8 не должен быть true?
Записан
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 845



« Ответ #33: 17 Январь 2022, 10:55 »

Видимо, должен. Вы добавили строки, а ссылку на диапазон Domains обновили?
Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #34: 17 Январь 2022, 11:14 »

Видимо, должен. Вы добавили строки, а ссылку на диапазон Domains обновили?

А где он выставляется, в самом коде макроса?
Записан
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 845



« Ответ #35: 17 Январь 2022, 11:25 »

В диалоге Управления именами. Если не ошибаюсь, Ctrl+F3
Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 845



« Ответ #36: 17 Январь 2022, 17:13 »

Вы отпишитесь по скорости на реальных данных: может ничего больше и не надо.

Функция Contains() универсальная.
Если оптимизировать по скорости, сортировать список доменов, то функцию придётся переделать.

Вопрос: А если домен идёт с префиксом, наличие этого префикса в проверяемой строке тоже обязательно? Сейчас – да.


* 6853EBF5-9673-404F-9E38-6B5271FC5B30.jpeg (52.18 Кб, 1090x329 - просмотрено 4 раз.)
« Последнее редактирование: 17 Январь 2022, 17:18 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #37: 17 Январь 2022, 17:49 »

В диалоге Управления именами. Если не ошибаюсь, Ctrl+F3
Спасибо, все работает!
Записан
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 845



« Ответ #38: 18 Январь 2022, 00:03 »

Посмотрите исходный пример с добавленными в дополнение к макросу 5-ю способами вычислений с использованием формул.

Для заполнения формулами массива других ячеек надо не протягивать мышкой формулу сверху вниз, а скопировать её, выделить диапазон вставки и вставить формулу из буфера обмена (Copy&Paste). В каждую выделенную ячейку будет вставлена своя формула массива со ссылками на нужную ячейку в текущей строке.

Updated:
В основе формула @Bigor из ответа #24 и формула @mikekaganski из ответа #25.

@Mric, использование SUMPRODUCT вместо SUM (без Ctrl+Shift+Enter) упрощает задачу протягивания мышкой формулы или мгновенного заполнения (крестик в правом нижнем углу ячейки с формулой). Всё работает.

Чем больше список доменов, тем медленнее будет работать функция Contains(), так как перебор значений осуществляется в цикле For - Next. Формулы массива используют внутренний цикл и, казалось бы, должны работать быстрее. Однако на наборе данных (см. ответ #30), равным 100 URL и 1000 доменов, функция Contains() работает быстрее в 2 раза (у меня 4 с против 8 с).

Файл обновлён.

* formula-urls-contains.ods (17.96 Кб - загружено 1 раз.)
« Последнее редактирование: 18 Январь 2022, 20:59 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #39: 20 Январь 2022, 10:55 »

Что-то не работает, просмотрел урлы, например dramtezi.ru и dpa1.ru нет в списке доменов, но они показываются как TRUE. Урлы начинаются за 7800 строкой.

* formula-urls-contains-full-full-1.ods (141.32 Кб - загружено 4 раз.)
Записан
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #40: 20 Январь 2022, 11:22 »

Посмотрите исходный пример с добавленными в дополнение к макросу 5-ю способами вычислений с использованием формул.

Для заполнения формулами массива других ячеек надо не протягивать мышкой формулу сверху вниз, а скопировать её, выделить диапазон вставки и вставить формулу из буфера обмена (Copy&Paste). В каждую выделенную ячейку будет вставлена своя формула массива со ссылками на нужную ячейку в текущей строке.

Updated:
В основе формула @Bigor из ответа #24 и формула @mikekaganski из ответа #25.

@Mric, использование SUMPRODUCT вместо SUM (без Ctrl+Shift+Enter) упрощает задачу протягивания мышкой формулы или мгновенного заполнения (крестик в правом нижнем углу ячейки с формулой). Всё работает.

Чем больше список доменов, тем медленнее будет работать функция Contains(), так как перебор значений осуществляется в цикле For - Next. Формулы массива используют внутренний цикл и, казалось бы, должны работать быстрее. Однако на наборе данных (см. ответ #30), равным 100 URL и 1000 доменов, функция Contains() работает быстрее в 2 раза (у меня 4 с против 8 с).

Файл обновлён.

Но в некоторых случаях он нормально фильтрует, но все равно оставляет урлы, доменов которых нет в списке.
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 215


« Ответ #41: 20 Январь 2022, 11:43 »

дело в том, что у Вас в диапазон доменов попадают пустые ячейки, UDF заменяет их 2 мя звездочками и соответственно под  это подходит любой адрес. Или диапазон доменов, должен быть размером с заполненной таблицы доменов, либо пустые ячейки диапазона доменов забить информацией, которой не может быть в имени домена
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #42: 20 Январь 2022, 11:51 »

дело в том, что у Вас в диапазон доменов попадают пустые ячейки, UDF заменяет их 2 мя звездочками и соответственно под  это подходит любой адрес. Или диапазон доменов, должен быть размером с заполненной таблицы доменов, либо пустые ячейки диапазона доменов забить информацией, которой не может быть в имени домена

Т.е. у меня 7800 ячеек должно быть доменов, но там условно 1500 и он криво работает из-за этого?
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 215


« Ответ #43: 20 Январь 2022, 12:06 »

он криво
сейчас он вообще у вас не работает
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Mric
Участник
**
Offline Offline

Сообщений: 38


« Ответ #44: 20 Январь 2022, 12:55 »

дело в том, что у Вас в диапазон доменов попадают пустые ячейки, UDF заменяет их 2 мя звездочками и соответственно под  это подходит любой адрес. Или диапазон доменов, должен быть размером с заполненной таблицы доменов, либо пустые ячейки диапазона доменов забить информацией, которой не может быть в имени домена
Точно, спасибо, работает!
Записан
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!