Показать полную графическую версию : [решено] Поиск слов по маске
Увидел забавную картинку и задался вопросом.
Как в смд искать слова по маске?
Тут зашифровано слово ХИТРЕЦ.
https://i.imgur.com/tzkfuQE.png
Соответственно из текстового файла со списком всех русских слов
хочу по маске ?и???ц найти слово хитрец
Я так понял что нативные find и findstr так не умеют.
Какой программой под смд можно найти слова по маске?
Может grep умеет?
Я так понял что нативные find и findstr так не умеют. »
findstr.exe умеет:
type "C:\Мои проекты\0296\0001.txt" | findstr.exe /i /r /c:"^[а-яё]и[а-яё][а-яё][а-яё]ц$"
Кодировка файла, естественно, должна быть в OEM/866.
Но лучше сие делать на WSH/PoSH, где есть полноценные (ну, или почти полноценные) регулярные выражения.
megaloman
24-01-2020, 19:41
Паразитирую на решении Iska@Echo Off
cls
Set "Mask=?и???ц"
Set "Vocabulary=Z:\Box_In\vocabulary.txt"
findstr.exe /i /r /c:"^%Mask:?=[а-яё]%$" "%Vocabulary%"
pause
Exit /B
Сделал формирование регулярки по маске
DJ Mogarych
24-01-2020, 22:32
Powershell:
$dict = gc C:\temp\slovar\zdf-win.txt
$dict -match "^\wи\w{3}ц$"
китаец
сириец
хитрец
чилиец
чистец
В словаре Лопатина ещё нашлись
дидоец
ливиец
лидиец
лионец
миасец
мидиец
пиреец
сиамец
сиенец
хищнец
DJ Mogarych, есть ещё одно - пИ..еЦ :)
ateka, я не знаю для чего вам это нужно, но есть программка для кроссвордов, которая делает всё тоже самое и даже больше. Cross+A (https://soft.softodrom.ru/ap/Cross-A-p20207). Имеет базу ~100000 слов с их описаниями.
Вот чо он выдал:
КИББУЦ (кибуц) кооперативное сельскохозяйственное предприятие в государстве Израиль
КИТАЕЦ (самоназвание - хань, ханьжэнь) представитель основного населения Китая
КИШНЕЦ (кориандр) растение семейства зонтичных (сельдерейных), медонос
ЛИВИЕЦ житель Ливии
ЛИВШИЦ российский актёр, создатель "Радионяни" совместно с Левенбуком; русский поэт, футурист (1886-1939)
ЛИДЕРЦ в венгерской мифологии злой дух, появляющийся на болотах в виде блуждающего огонька
ЛИПШИЦ французский художник, выходец из Литвы (1891-1973)
ЛИФШИЦ братья, российские физики-теоретики: (1915-1985) и (1916/17-82); российский литературовед (1905-1983)
СИАМЕЦ житель Сиама
СИРИЕЦ житель Сирии
ХИТРЕЦ хитрый человек
ХИЩНЕЦ насекомое, клоп
ЧИЛИЕЦ житель Чили
ЧИСТЕЦ медоносное травянистое растение семейства губоцветных
DJ Mogarych
24-01-2020, 23:15
Это понятно, но таких слов в словари обычно не добавляют.
программка для кроссвордов »
Цена: Условно-бесплатная, 1200 руб :gigi:
Лучше уж Пауэршеллом.
Тем более, что у моих словарей 169037 уникальных слов.
(gc C:\temp\slovar\zdf-win.txt,C:\temp\slovar\lop1v2.txt |sort -Unique).count
169037
Iska,megaloman, Увы не ищет. Не уважает подстановки [а-яё].
Если они идут подряд то findstr их игнорирует.
DJ Mogarych, а можно ванлайнер? Я бы его в батник засунул.
если в файле только русские слова, то вместо шаблона конкретных букв можно писать литерал произвольного символа - точку
findstr /i /r /c:"^.и...ц$" vocabulary.txt
можно ванлайнер? Я бы его в батник засунул. »
Select-String '^.и...ц$' vocabulary.txt -Encoding OEM | Select-Object -ExpandProperty Line
Увы не ищет. Не уважает подстановки [а-яё].
Если они идут подряд то findstr их игнорирует. »
видимо, вы где-то ошиблись
Iska,megaloman, Увы не ищет. Не уважает подстановки [а-яё]. »
https://i.imgur.com/jqulsjX.png
megaloman
25-01-2020, 06:58
ateka, Увы не ищет. Не уважает подстановки [а-яё]. »
либо у Вас батник не в 866 кодировке, либо словарь не в 866 кодировке, либо и то и другое вместе.
DJ Mogarych
25-01-2020, 08:12
а можно ванлайнер? »
можно:
powershell -command "(gc C:\temp\slovar\zdf-win.txt) -match '^\wи\w{3}ц$'"
Я потратил два часа на перебор всех вариантов и получил следующее.
В моей конфигурации ищет только если словарь в utf-8.
Возможно это из за включенной настройки:
https://i.imgur.com/QMFWYz3.png
Я сохранял батники в 866. Конвертировал словари во всевозможные кодировки.
Но findstr на регулярку плевать хотела.
В любом случае проблема решена. Слава ПоШ!
Всем большое, большое спасибо.
Возможно это из за включенной настройки: »
а зачем она такая?!
Тем более, что у моих словарей 169037 уникальных слов. »Если не жалко, скинь куда угодно или ссылку хоть сюда, хоть на любой обменник (только не через соцсети).
В своё время у самого были словари ~800000 словов. Только они "брутиловские" и в них много лишнего.
Цена: Условно-бесплатная, 1200 руб »А кто сказал что будет легко? :)
а зачем она такая?! »
Ну например после включения этой настройки я наконец то смог связываться по API с одним русскоязычным сайтом.
Там нужен был json а он по определению юникод. И раньше приходилось гонять вм с линуксом.
Если не жалко, скинь куда угодно или ссылку »
Я скачивал отсюда:
https://github.com/danakt/russian-words
megaloman
25-01-2020, 17:17
ateka, Если надо ехать, а не шашечки, то проще пареной репы загрузить текстовый файл словаря (загружается нормально файл и с 866, и с 1251 и с UTF8 кодировкой), и использовать стандартное средство - фильтр. И не надо никаких иных приблуд. И интерфейс внятный и минимум затрат при вводе новой маски в поиск.
Прикрепляю Excel-файл с загруженным отсюда для примера словарем (http://blog.harrix.org/article/3334). Он был в UTF8.
Если надо ехать, а не шашечки »
Мне именно ехать :). Спасибо.
megaloman
25-01-2020, 18:29
ateka, Iska,megaloman, Увы не ищет. Не уважает подстановки [а-яё].
Если они идут подряд то findstr их игнорирует. » Кстати, как доказательство, прикрепляю этот же словарь в 866 кодировке + мой батник в 866 кодировке, мой батник с findstr (http://forum.oszone.net/post-2906763-3.html) (фирма веников не вяжет!), как и (я уверен) батник Iska, работает. Попробуйте! Но если ехать, то Excel удобнее.
если в файле только русские слова, то вместо шаблона конкретных букв можно писать литерал произвольного символа - точку »В этом случае мой батник упрощается и его можно записать в виде@Echo Off
cls
Set "Mask=.и...ц"
Set "Vocabulary=vocabulary.txt"
findstr.exe /i /r /c:"^%Mask%$" "%Vocabulary%"
pause
Exit /B
DJ Mogarych
25-01-2020, 19:56
Если не жалко, скинь куда угодно или ссылку хоть сюда, хоть на любой обменник »
http://www.speakrus.ru/dict/
Я скачал Зализняка и Лопатина, и для этой темы грузил их оба.
прикрепляю этот же словарь в 866 кодировке + мой батник в 866 кодировке, мой батник с findstr (фирма веников не вяжет!), как и (я уверен) батник Iska, работает. Попробуйте! »
Проверил. Не работает. Видимо мои локальные настройки shell не совместимы с кодировкой OEM-866.
Впрочем ничего страшного, есть PoSh, есть Эксель. Эксель для меня даже удобней.
Ещё раз спасибо за помощь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.