Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 90 След.
Инструменты для работы с массивами в VBA (COM), Фильтр для массива
 
Недавно потребовался инструмент, который загружает и фильтрует данные из разных Excel-файлов. Решил сделать GUI для формирования условий для данного фильтра.
Пока это выглядит вот так
GUI можно использовать из библиотеки COM или XLL. Возвращает массив условий для фильтра и строку для пользователя для удобства.
Изменено: bedvit - 11.06.2025 23:14:59
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
sokol92, Владимир, спасибо за доп. информацию.
Остались нераскрыты несколько пунктов по ссылке:
1. "If either <expression> or <like-pattern-expression> is Null, the result is Null."
Видим что не всегда выполняется, пример:
Код
Debug.Print "" Like "[]" 'True. По ссылке: <expression> is Null, значит результат Null, т.е. False

2."<like-pattern-charlist-range>: This adds a range of characters to the character list, including all characters considered greater than or equal to the first <like-pattern-charlist-char> and considered less than or equal to the second <like-pattern-charlist-char>. If the end character of this range is considered less than the start character, runtime error 93 (Invalid pattern string) is raised."
Видим что условие выполняется в примере ниже, последний символ НЕ больше первого, но выдается ошибка, пример:
Код
Debug.Print "F" Like "*[F-F]" 'почему Error? ведь True

3.Ничего не поясняется про такой пример:
Код
Debug.Print "5" Like "*[1-4-6]" 'True - диапазон с конца маски?
Debug.Print "2" Like "[1-4-6]"  'True - диапазон с начала маски?
Debug.Print "-" Like "[1-2-3]" 'почему True? ведь "-" не в начале и не в конце.

4."The next characters in <like-pattern-expression> do not form a valid, complete <like-pattern-element> according to the grammar. In this case, runtime error 93 (Invalid pattern string) is raised. Note that this runtime error is only raised if no other result has been produced before pattern matching proceeds far enough to encounter this error in the pattern."
Код
Debug.Print "F" Like "F[" 'почему False, а не Error?

Это стало понятно из тестов, что маска проверяется не всегда до конца, что приводит пользователя в замешательство, когда одна часть результатов False, другая Error 93. Лично вижу, что проверка маски до конца более правильный вариант, в ущерб снижения скорости выполнения для проверки оставшийся части маски. Здесь вопрос к обсуждению, что предпочтительнее: скорость или гарантированная ошибка при некорректной маске?
Опрос: Что для вас важнее?
Изменено: bedvit - 21.05.2025 12:59:46
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
Цитата
Бог Excel и гамбургеров написал:
Да, конечно. Тут всё подробно:  Microsoft Specification
Не ожидал, что у вас настолько глубокие знания!
Предлагаю бан для этого субъекта, пусть почитает правила форума.
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
Цитата
Бог Excel и гамбургеров написал:
Потому что сперва проверяется строка, если пусто, тогла FAlse!
А здесь строка пустая, но почему True... ай-я-яй
Код
Debug.Print "" Like "[]" 'True


Цитата
Бог Excel и гамбургеров написал:
Потому что *[1-4-6] = {1-6} = 5
{1-6} = 2 , но почему False... ай-я-яй
Код
Debug.Print "2" Like "*[1-4-6]" 'False


Цитата
Бог Excel и гамбургеров написал:
Потому что *[F-F] это не диапазон!
Извините, а что же это?

Цитата
Бог Excel и гамбургеров написал:
Звёздочка определяет поведение и преобразует всё в единый диапазон на основании таблицы ASCII, Иззи!
Можно ссылку, подтверждающие ваши слова, ибо все это выглядит как, прямо скажем... ваши фантазии. Или троллинг.
Изменено: bedvit - 16.05.2025 14:31:01
«Бритва Оккама» или «Принцип Калашникова»?
Безопасность проекта
 
Цитата
Ronin71 написал:
...если верить описанию, это кого угодно собьёт с толку )))
еще одна ложка дегтя...
Заходим в любой онлайн форматировщик (особенно с хорошим ИИ), и код уже смотрится не так страшно...
Изменено: bedvit - 16.05.2025 11:37:21
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Но если вдруг, Like начинает разбор шаблона справа налево
Дмитрий приветствую!
Как хочет, так и сравнивает...и с начала и с конца...пример:
Код
    Debug.Print "5" Like "*[1-4-6]" 'True - диапазон с конца маски
    Debug.Print "2" Like "[1-4-6]"  'True - диапазон с начала маски


Поясню почему возникла эта тема. В С++ нет такого оператора. Я решил максимально точно воспроизвести Like VBA, но у меня не получилось воссоздать этот гениальный алгоритм, где нет четкой парадигмы. Где-то возвращает False, вместо ошибки, где-то True!!! (см. пост 1), где-то считает в одном контексте, где-то в другом, при одинаковой маске или одинаковых строках разные результаты... Где-то маска с открытой скобкой - ошибка "[...", где-то не ошибка (см. сообщение 3) и т.д.

Плюнул, сделал свою реализацию, где [1-4-6] считается валидной маской, всегда считается слева направо, как в регулярках, а не как в Like VBA (в одних случаях с конца, в других с начала, поди угадай какой должен быть результат - см. выше в этом сообщении) . И маска всегда проверяется на закрытую скобку и корректность диапазона "[a-b]" (первый символ не может быть больше последнего, но может быть равен - как в регулярках, в LIke может быть равен, а может быть и ошибка, см. пост 1). т.е. алгоритм должен предполагать только единственный точный валидный! результат, без экстрасенсов и гадалок или возвращать ошибку!
Изменено: bedvit - 15.05.2025 22:59:49
«Бритва Оккама» или «Принцип Калашникова»?
Регулярные выражения (Regexp) в Excel
 
Мое почтение, джентльмены.
Нужны ли сейчас в Excel современные (имеют POSIX-классы. Обратный поиск и другие фичи не тестировал.) регулярные выражения?
В ассортименте: Поиск, вывод нужных символов, замена.
Функционал из стандартных C++ библиотек. Не самописные (да я бы и не смог такой сложности проект быстро сделать, да и не быстро тоже)
К примеру:


Или не актуально?
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
nilske, если прочитать мое сообщение 5, то там есть выдержка из спецификации, где написано, почему должно вернутся False (потому что "-" не в начале и не в конце charlist). А возращается True. Поэтому я и спрашиваю, почему так? Где проблема?
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
nilske, Вы считаете, что Like работает неправильно? И считаете, что это обсуждать не нужно? Т.е. работет неправильно, ну и ладно, че обсуждать-то, верно? Правильно ли я вас понял?
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
nilske, встречный вопрос: а что неправильного в моем шаблоне, какой части спецификации он не соответствует?
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
nilske, осталось... читаю спецификацию:
"Дефис ( - ) может стоять либо в начале (после восклицательного знака, если он используется), либо в конце charlist , чтобы соответствовать самому себе. В любом другом месте дефис используется для обозначения диапазона символов."
Пишу код:
Код
Debug.Print "-" Like "[1-2-3]" 'почему True

Вопрос: почему True?
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
ZVI, Владимир, приветствую!
Цель вопроса? наверное пообщаться, выйти покурить в перерыв между работой (я не курю, но здесь-то можно в курилке?)
Цитата
ZVI написал:
символ в диапазоне "[1-4]" ИЛИ символ "-" ИЛИ символ "6"
Да все верно, это валидный паттерн для старщего брата - Регулярных выражений. Можно проверить на https://regex101.com/
Собственно складывается впечатление, что Like писали спустя рукава, начали видимо хорошо, паттерны 1-2,3 выполняются с таким же итогом как и итог регулярных выражений...
Потом что-то пошло не так (что-то не смогли?) или решили, а и так хватит... давайте сделаем ограничение на это ("-" разделитель только в конце или в начале, что в регулярках не обязательно), да и норм...
Сомнительно... но Окей...
Смотрим далее
Код
    Debug.Print "F" Like "[" 'Error
    Debug.Print "" Like "[" 'почему False?

Первый паттерн явно ошибочен, не закрыта скобка. Все понятно - ошибка. А второй возвращает False, т.е. маска норм, вопросов не вызывает?
Смотрим регулярки - во всех двух случая ошибочная маска - ошибка (там же на сайте regex101 можно проверить, для всех языков)

Хорошо, специалисты говорят, не надо смотреть ругулярки, смотри спецификацию к оператору Like и не выдумывай лишнего...
Если петтерн не соответствуеn спеке - это все UB...

Ну Ок говорю я, а где в спеке написано что задать диапазон следующим образом [F-F] ошибка? И почему если это ошибка, не выходит сообщение в VBA?
Я вижу в спеке лишь ошибку, если первое значение больше второго (должно быть в возрастающем порядке)
..."[A-Z] является допустимым шаблоном, но [Z-A] не является."...
Если ошибка, зачем возвращается True (я понимаю еще False вместо ошибки, но тоже так себе)? Т.е. все валидно и даже положительный результат сравнения!

Что в итоге: абы как составленный инструмент, где -то возвращающий False, вместо ошибки, где-то True!!!, где-то считает в одном контексте, где то в другом при одинаковой маске или одинаковых строках.
Изменено: bedvit - 15.05.2025 10:02:05
«Бритва Оккама» или «Принцип Калашникова»?
Странное поведение Like (VBA)
 
Мое почтение, джентльмены.
Есть интерес послушать специалистов, почему Like в варианте 3 выдает True, а в последнем варианте ошибку?

Код
Sub TestLikeERR()

    Debug.Print "-" Like "[1-4-6]" 'True
    Debug.Print "5" Like "[1-4-6]" 'False
    Debug.Print "5" Like "*[1-4-6]" 'почему True?
    
    Debug.Print "F" Like "[F-F]" 'True
    Debug.Print "F" Like "*[F-F]" 'почему Error?

End Sub


Настолько впечатлен этим инструментом, что разместил вопрос и здесь.
Изменено: bedvit - 14.05.2025 22:49:33
«Бритва Оккама» или «Принцип Калашникова»?
Как получить сертификат доверенного издателя и подписывать им надстройки?
 
Создать, использовать Code Signing сертификат. Все можно сделать через командную строку.

CodeSigning для разработчиков под Windows по новым правилам
Изменено: bedvit - 16.04.2025 09:57:59
«Бритва Оккама» или «Принцип Калашникова»?
Как получить сертификат доверенного издателя и подписывать им надстройки?
 
Для юр. лиц это не проблема:
https://www.globalsign.com/ru-ru/code-signing-certificate
«Бритва Оккама» или «Принцип Калашникова»?
Как получить сертификат доверенного издателя и подписывать им надстройки?
 
romaro, мне тоже интересна эта тема. Поиск ответа по этому вопросу привел меня к тому, что в России сейчас нельзя для физ. лиц купить Code Signing сертификат.
Самоподписанный сертификат - сейчас это больше минус, чем плюс. Не советую.
Я делал самоподписанные сертификаты, итоги отрицательные, если использовать не только в своей компании, где вы можете поместить его в доверенные на каждом ПК, а распространять свой продукт во внешний мир.
Самоподписанный сертификат, просто не даст Excel открыть вашу надстройку или dll без добавления его в доверенные. А добавлять на его на свой ПК будет не каждый пользователь.
Изменено: bedvit - 16.04.2025 09:46:05
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Chernyshov, что у вас конкретно не получается? В моем ответе ссылка на инструмент, на странице этого инструмента есть описание и видео. Если вам это подходит, там же по ссылке можно перейти и скачать настройку для Excel. Установить ее и пользоватся этим инструментом. На каком этапе у вас возникли проблемы? Все ссылки рабочие
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Chernyshov, нажмите на ссылку в 167 сообщении и по ссылке все подробно написано и показано.
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Chernyshov, если использовать сторонние инструменты, то можно воспользоватся этим вариантом
«Бритва Оккама» или «Принцип Калашникова»?
Р7 офис, Импортозамещение аналог excel
 
Цитата
sokol92 написал:
аналог UDF функций Excel, которые хранятся в надстройках.
Надстройкой можно поделится, это тот же файл Excel. А здесь как?
«Бритва Оккама» или «Принцип Калашникова»?
ДР (ex HB)
 
БМВ, Михаил, агрофитнес - вещь необходимая, не поспоришь. Про указатели красиво написал, возьму на заметку ;-) Спасибо!
Изменено: bedvit - 01.07.2024 20:42:35
«Бритва Оккама» или «Принцип Калашникова»?
ДР (ex HB)
 
Msi2102, спасибо!
«Бритва Оккама» или «Принцип Калашникова»?
Сравнение времени работы VBA-макросов с различными алгоритмами
 
ZVI, Владимир, спасибо за точку зрения. Надёжность всегда в приоритете, не поспоришь )
«Бритва Оккама» или «Принцип Калашникова»?
vba vs office scripts, что лучше vba vs office scripts?
 
Цитата
artemkau88 написал:
Файл весит больше 2,5гБ. Железо: 4 гБ оперативки и 2-х ядерный процессор (виртуалка). Время работы - 15 минут. Но это без учета операций записи в файл с результатом.
Думаю можно уместится в минуту.

Вот мои результаты с учётом чтения из файла (тоже делал поиск нужной строки в csv файле)
Быстрая реализация поиска строк в csv/txt(ANSI) файлах (WinAPI + С++)

При документированной скорости чтения SSD - 450 Мб/с, 10 ГБ читается за 22,2 сек, что близко к скорости поиска (25,45 сек. с отключенным кешированием - 40 млн.строк, ищем последнюю).
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
bastepa, при тестировании отключил и в релизе забыл включить СОМ в сборку. Включил, обновил релиз, теперь кнопка должна быть активна.
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Цитата
bastepa написал:
Может есть способ обновить в win7 "алгоритмы компрессии  compressapi.h " ?
Это Win Api. Там же, по ссылке, написано Minimum supported client Windows 8.

Т.е. это вопрос не ко мне, а к Microsoft, почему они не завезли в win7 данные api :)

Таким образом версия для win7 не сможет открывать упакованные файлы сохранений или зашифрованные данные листа Excel, если в них было сжатие.
Штатная версия может читать и сжатые данные и не сжатые, в т.ч. созданные в версии для win7.
Т.е. совместимость в одну сторону (штатной версии).
Файл пользовательских сохранений можно явно сохранить без сжатия, тогда он откроется и версии win7 и в штатной.
Зашифровка ячеек Excel сложнее, здесь алгоритмы сжатия включаются, если сжатый текст меньше не сжатого, т.е. после какого-то количества символов в ячейке.
Другими словами короткий текст и формулы скорее всего не будут сжиматься, т.е. смогут расшифровываться в обеих версиях. На длинных текстах, скорее всего версия win7 не сможет расшифровать данные. Длинна данного текста или формулы не тестировалось, нужно смотреть на практике (при какой длине включается сжатие).
Изменено: bedvit - 03.06.2024 12:06:31
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Цитата
bastepa написал:
win8.1 64 и excel 2016 32.
На этой конфигурации должны работать две версии (и специальная для win7 и обычная). Лучше использовать обычную, там есть алгоримы компрессии/сжатия данных (меньше размер сохраняемых и зашифрованных данных).
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Добавил новую версию для win7 и небольшую справку в новостях, тестируйте. Спасибо за тесты.
«Бритва Оккама» или «Принцип Калашникова»?
Сравнение времени работы VBA-макросов с различными алгоритмами
 
Цитата
testuser написал:
Да уж это просто та штука, которой выстрелили в ногу бейсику, тупой сборщик мусора, но бейсик, видимо на это и не рассчитывался будучи "бейсиком", даже учитывая гениальность его архитекторов..

Бейсик здесь не причем. В любом ЯП есть штатные механизмы выделения и освобождения памяти. Если вы идете своим путем - будьте добры сами контролировать этот функционал (в Си/С+ в такой парадигме получите битые или висячие указатели, утечку памяти и в Шарпе сборщик мусора не поможет). Но за пробы пера плюсую, главное в прод не выводить, здесь полностью согласен с Владимиром (ZVI).

ZVI, Владимир, а если убрать зануление массивов в деструктор класса (VBA) (Class_Terminate())? что быстрее вызывается деструктор класса или очистка всех переменных модуля тестового кода? Будет ли в таком случае ошибка
Цитата
ZVI написал:
если в VBE нажать на сброс Run-Reset
Изменено: bedvit - 02.06.2024 10:22:45
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Предлагая почистить тему, 5й лист предлагаю удалить полностью и последних 2 сообщения (в т.ч. и это)
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 90 След.
Наверх