|
|
||||||
Поиск подстроки в строке наиболее эффективным способом22.04.2021, 09:42. Показов 7577. Ответов 48
Метки нет (Все метки)
Добрый день уважаемые
Возникла необходимость отфильтровать строки в достаточно большом CSV файле, задумался над эффективностью. Вариант
Мне нужно сократить файл в 600 метров, фильтр будет по нескольким полям. Пока два, строки содержащие в одном поле значение из списка `("ab", "ac")`, и в другом поле значение из списка `('a123', 'b123', 'c123')` Если в выборку попадут строки со значениями из списков в других полях это не принципиально. К результирующей выборке уже можно применять Import-CSV | Where-Object так так она будет не большая. Буду признателен идеям по реализации.
0
|
||||||
| 22.04.2021, 09:42 | |
|
Ответы с готовыми решениями:
48
Поиск подстроки в строке и вывод подстроки Продвижение статьями и ссылками: как сделать его наиболее эффективным |
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
|
| 23.04.2021, 18:33 | |
|
0
|
|
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
|||||||
| 23.04.2021, 21:05 | |||||||
|
Это не специфическое поведение, а вполне нормальное. Об этом поведении сказано в документации. И так не только в powershell:
0
|
|||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||||||||||||||||||||||||||||||
| 23.04.2021, 23:19 | ||||||||||||||||||||||||||||||||||||
|
$null в исполнении разаботчиков powershell - вещь в себе и что там придет тем разработчикам в голову, в обозримом будущем - тайна покрытая мраком... ![]() Ну давай, я покажу, что такое $null в представлении разработчиков powershell ![]()
![]() Ну и для полного понимания картины:
![]() Такшта... делайте выводы. На грабли можно наступить так, что и сам не поймешь с какой стороны получил по голове... а ты говоришь автоматическое приведение... зло это. Добавлено через 16 минут Ну и на закуску:
![]()
1
|
||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||
| 24.04.2021, 06:41 [ТС] | |||||||||||||||||||
Добавлено через 14 минут
Добавлено через 6 минут Добавлено через 8 минут В sql с этим строже, любая операция сравнения с null приводит к ошибке, нужно использовать оператор is
0
|
|||||||||||||||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||
| 24.04.2021, 08:06 | ||||||
![]() $null вместо строки/символа...![]() Ты функцию-то Get-True проверил? И что думаешь по этому поводу?Руки... руки бы поотрывать за такое - мое мнение.
0
|
||||||
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
|||||||||||||||||||||||||
| 24.04.2021, 16:26 | |||||||||||||||||||||||||
|
YuS_2, это все интересно, но говорили мы изначально о другом
![]()
$null нужно размещать в левой части.Ничто = ничто
2. ничего = дважды ничего 3. 2 * ничего для чисел = 2 * 0 = 0 4. ничего != цифра ноль. Добавлено через 5 минут
0
|
|||||||||||||||||||||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||||||||
| 24.04.2021, 18:40 | ||||||||||||||
-eqИ кроме того:
1. $null, а совсем не False 2. False - что, собственно и получили... Так вот, это есть несоответствие документации - номер раз, в п.1. Мы ведь не делали ничего, что противоречит документации, правильно? Далее: $null плавно таки стал эквивалентом 0? Но это ведь не одно и то же - верно? Поэтому вести речь о цифрах, в зависимости от местоположения $null в математическом действии, абсолютно некорректно... максимум о чем можно говорить, это об исключении, которое должно было возникнуть. ![]() Но принцип работы функции и почему так происходит, можно посмотреть здесь Подводя итог: Понятно, что в powershell разработчики решили по-своему, как будет работать автоматическое приведение типов, причем в зависимости от контекста, но это просто надо учитывать и не оставлять на откуп таким вот не всегда предсказуемым действиям. То бишь, значения и типы, по возможности, лучше задавать явно, меньше шишек получим на лбу, в итоге. ![]() Добавлено через 17 минут Чтобы кратко обозначить мою претензию к разработчикам, у меня есть вот такой вот пример:
0
|
||||||||||||||
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
||
| 24.04.2021, 21:14 | ||
|
Отсутствие результата или значение $null вычисляется как $false
0
|
||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
|||
| 24.04.2021, 23:47 | |||
|
Fors1k,
А в документации, ссылки и цитаты, на которую я приводил, говорится о том, что коллекции размещаются слева... противоречие, однако ![]()
0
|
|||
|
7150 / 2338 / 353
Регистрация: 10.12.2013
Сообщений: 8,100
|
||||||
| 25.04.2021, 03:39 | ||||||
|
Из коллектива вылетает разъяренный Тромбон:
0
|
||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
|||
| 25.04.2021, 08:40 | |||
|
Ведь, строго говоря, void - это не тип данных:
0
|
|||
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
||||||||||||||||||||
| 25.04.2021, 17:16 | ||||||||||||||||||||
|
Добавлено через 8 минут Там сказано: ставить $null слева. Смысл спорить с документацией? ![]() Если очень хочется поставить $null справа, то сейчас объясню что в таком случае происходит. Ну, вроде, все в порядке теперь ![]() Тогда для
1
|
||||||||||||||||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||||||||||||
| 25.04.2021, 22:42 | ||||||||||||||||||
![]() С какого перепуга у NULL, внезапно, появляется тип и этот NULL плавно перетекает в 0? Это противоестественно... "ничего" не может быть преобразовано в ноль, это абсолютно разные сущности. Автоприведение типа в такой ситуации - "абсолютное зло" ![]() Т.е. я, конечно, согласен с рекомендацией, но она верна только для случая, когда сравниваются два скаляра, для коллекции она негодна. Из официальной документации:
![]() ![]() ![]() Добавлено через 20 минут ![]() Ещё осталось разобраться с void, почему в powershell стало возможным применять его к переменным... ведь, тот же самый dotnet... казалось бы.
0
|
||||||||||||||||||
|
7150 / 2338 / 353
Регистрация: 10.12.2013
Сообщений: 8,100
|
|
| 26.04.2021, 00:25 | |
|
Ха.
ХА! ХА-ХА! Знаете, что мне это напомнило ? Кликните здесь для просмотра всего текста
да, нужно верить своим глазам : применение BOOLEAN к массиву с количеством членов больше 1, даёт истину ВСЕГДА. Вне зависимости от значений членов массива. Даже если все члены массива не инициализированы( а $null служит в массиве именно для этого, чтобы место греть ), значением [boolean]@(0,0,0,0), т.е, при кол-ве членов в массиве >1, будет всегда TRUE. Если же массив единичный и его значение и не 0, и не $null, то вернётся TRUE, а если 0 или $null, то вернётся FALSE Ну и хуле ? А как работает этот механизм высчитывания ? Каким образом (0 -OR 0) дадут TRUE, или (0 -AND 0) дадут TRUE? Подозреваю, что никак не работает, просто так решили: десять сольдо плюс пять сольдо равно сто сольдо. Какое небо голубое...
0
|
|
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||
| 26.04.2021, 04:36 | ||||
|
Что касается массивов, то массив из одного элемента и массив из элементов больше одного, отличаются и подозреваю, что сделано это именно для того, чтобы работали операции сравнения как со скалярами (при условии, что коллекция состоит из одного элемента).
![]() ну а если серьезно, то почему (FALSE -OR FALSE) или (FALSE -AND FALSE) должны давать TRUE? Это же классика булевой логики...
0
|
||||
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
|||||||||||||
| 26.04.2021, 14:30 | |||||||||||||
|
Ну, в общем, если нет желания верить написанному на Docs / PowerShell, то хозяин - барин) Ставь $null справа, я не принуждаю ни к чему насильно)) :В 5.1 такой код $VAL = @( $NULL, [void]$NULL ) вообще не запускается.Этот Write-Host ([void]5) не запустится в PScore.![]() Проверить существование объекта, похоже, можно так:
0
|
|||||||||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||||||||||
| 26.04.2021, 15:54 | ||||||||||||||||
|
Ещё раз: я постоянно талдычу про скаляр $null и коллекцию - сам поймешь, или нужны подробности? Ну ок, вот подробности... по моей ссылке, которую ты процитировал :![]() Но теперь внимательно читаем, ЧТО именно ты процитировал:
![]() И ещё: а прочитал ли ты далее, а именно то, что следует сразу за процитированным текстом?
![]()
и ещё это:
и это все "подробности"...
Где описание того, что переменные (не методы, не функции, а именно переменные) можно приводить к типу [void]? По факту, такое действие не вызывает исключений. Почему? Добавлено через 8 минут ![]() Не хочется ведь наступать на одни и те же грабли... снова и снова... И всем почитать будет полезно, ведь в изменяемой постоянно документации так "подробно", "доходчиво" и авторитетно всё расписано, что неизбежные ошибки попросту гарантированы...
0
|
||||||||||||||||
|
㊙️
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
|
||||||||||
| 26.04.2021, 16:57 | ||||||||||
Бог помог, спасибо) *посмотреть в документацию* Не знаю как еще объяснить... Надеюсь код, приведенный выше уже все прояснит. Ты правильно говоришь, что коллекцию надо помещать слева. Но только return от такого действия будет не булен, а массив. Нам для ифа что нужно? Булен или массив? Если нам вернут массив, то дальше решение от ифа - радном. В плане, что оно будет зависеть от количества элементов. Если один, и он будет "" или 0 или $null, то получим фолс. Иначе - тру. Мы так не проверяем равенство, а просто делаем выборку из массива. Если после эту выборку ожидает if, то "будь что будет". Как раз по этой причине в документации, и в "очень документации" сказали, что если мы хотим узнать является переменная "ничтожеством", или живой коллекцией(либо еще чем-то), то $null должен быть слева. Следуя этой рекомендации, мы даже здесь $null -eq @($null) получим правильный фолс, так как строго говоря "ничто" -это не тоже самое, что и существующий объект System.Array, имеющий свойства и методы.Я вообще люблю такие дискуссии, особенно с YuS_2 ![]() Можно узнать много полезного, и в целом познавательно)
0
|
||||||||||
| 26.04.2021, 16:57 | |
|
Какой алгоритм сортировки сравнениями признается лучшим и наиболее эффективным? Ввести с клавиатуры строку. Найти шаблон во введенной строке (поиск подстроки в строке) Поиск подстроки в строке Поиск подстроки в строке Поиск подстроки в строке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|