Показать полную графическую версию : Программа для поиска слов по маске в txt
lyohalyoha
06-02-2021, 10:55
Здравствуйте! Имеется файлик dic.txt со словами внутри. Есть ли такие программы,к которым можно подключить этот файл и чтобы она смогла искать слова по маске в этом файле? Или может кто сможет такую программку сделать? Программа простенькая,без наворотов,только поиск слов по маске. Буду очень признателен,если кто подскажет такие программы или сам сделает,если не трудно :-)
lyohalyoha, непонятно одно — зачем Вы выбрали тогда раздел Программирование, подраздел AutoIt?
Программ великое множество. Что Вы хотите получить в конечном итоге?
lyohalyoha
06-02-2021, 14:00
непонятно одно — зачем Вы выбрали тогда раздел Программирование, подраздел AutoIt? »
А какой раздел подходит для моего вопроса? Нашёл подобный вопрос в этом разделе,но он отличается от моего.
Программ великое множество. Что Вы хотите получить в конечном итоге? »
Что-то не нашёл ни одну программу :-( Перечислите несколько,если вам не трудно. Нужно,чтобы программа подключала текстовый файл (dict.txt) и искала в нём слова по маске,например по запросу ?ве?д?-результат звезда.
Нужно,чтобы программа подключала текстовый файл (dict.txt) и искала в нём слова по маске,например по запросу ?ве?д?-результат звезда. »
Ну а дальше? нашла она слово по маске, что с ним делать, просто вывести на экран?
Мне кажется вам просто нужен движок проверки орфографии (https://senpai-ed.livejournal.com/8396.html).
lyohalyoha, любой текстовый редактор, сложнее блокнота и Write'а, имеющий поиск по регулярным выражениям.
И снова тот же вопрос:
Ну а дальше? нашла она слово по маске, что с ним делать, просто вывести на экран? »
lyohalyoha
08-02-2021, 09:42
Ну а дальше? нашла она слово по маске, что с ним делать, просто вывести на экран? »
Да,нужно просто выводить найденные слова,которые соответствуют маске. А на счёт "движка проверки орфографии"-там нужен установленный MS Office.Установить его возможности нету.
любой текстовый редактор, сложнее блокнота и Write'а, имеющий поиск по регулярным выражениям. »
Спасибо за совет! В Notepad++ смог искать по маске только так "ма.ин.", с точкой вместо вопроса. Может подскажете более лёгкий способ?
lyohalyoha, это нормальный способ — обычный поиск по регулярным выражениям. Точка означает один любой символ. Знак вопроса же — квантификатор для предыдущего символа, одначающий «ноль или один».
Возможно, проще всего Вам будет использовать поиск посредством PowerShell.
$sFileRead = FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)('dic.txt')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sFileRead = '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit) MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), 'Unable to read File dic.txt')
$sMask = InputBox (http://www.autoitscript.com/autoit3/docs/functions/InputBox.htm)('Mask', 'Enter search maswk:', '')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
$aSearch = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sFileRead, '(' & StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sMask, '?', '.') & ')', 3)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 0 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aSearch)-1
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), $aSearch[$i])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
lyohalyoha
10-02-2021, 09:25
Код:
$sFileRead = FileRead('dic.txt')
If $sFileRead = '' Then Exit MsgBox(64, @ScriptName, 'Unable to read File dic.txt')
$sMask = InputBox('Mask', 'Enter search maswk:', '')
If @error Then Exit
$aSearch = StringRegExp($sFileRead, '(' & StringReplace($sMask, '?', '.') & ')', 3)
For $i = 0 To UBound($aSearch)-1
MsgBox(64, @ScriptName, $aSearch[$i])
Next »
Здравствуйте! Спасибо за код! Скомпилировал его,но словарь не открывает.Словарь весит 28мб.Подключил меньше словарь и всё заработало! Но! При поиске по маске,например ?ЛА-выдаёт несуществующие слова в словаре-например-ЛЛА,БЛА,ПЛА,ЛА,СЛА,ПЛА и т.д. Как это можно решить? И чтобы показывались слова не по-одному,а сразу список.А то,если слов много,то приходится постоянно ОК нажимать-это очень долго будет ведь. Спасибо за помощь!
Словарь весит 28мб.Подключил меньше словарь и всё заработало! »
28 мб должен спокойно открывать.
выдаёт несуществующие слова в словаре »
Это парадокс )). Он не может выдавать несуществующие слова, т.к их нет.
Как это можно решить? »
Сначала нужно понять что решать. Какой результат ожидается от ?ЛА?
чтобы показывались слова не по-одному,а сразу список »
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
$sFileRead = FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)('dic.txt')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sFileRead = '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit) MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), 'Unable to read File dic.txt')
$sMask = InputBox (http://www.autoitscript.com/autoit3/docs/functions/InputBox.htm)('Mask', 'Enter search maswk:', '')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
$aSearch = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sFileRead, '(' & StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sMask, '?', '.') & ')', 3)
_ArrayDisplay (http://www.autoitscript.com/autoit3/docs/libfunctions/_ArrayDisplay.htm)($aSearch)
28 мб должен спокойно открывать. »
Ну да есть немного задержка, но думаю это терпимо...
Вот вариант для поверки (создаётся файл в 30 мб):
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
$sDictFile = _CreateDemoDict(30) ;dict.txt
$sFileRead = FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)($sDictFile)
FileDelete (http://www.autoitscript.com/autoit3/docs/functions/FileDelete.htm)($sDictFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sFileRead = '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit) MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), 'Unable to read File')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$sMask = InputBox (http://www.autoitscript.com/autoit3/docs/functions/InputBox.htm)('Mask', 'Enter search mask:', 'Line 1?0')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
$sMask = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sMask, '?', '.')
$sMask = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sMask, '*', '.*')
$aSearch = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sFileRead, '\b(' & $sMask & ')\b', 3)
_ArrayDisplay (http://www.autoitscript.com/autoit3/docs/libfunctions/_ArrayDisplay.htm)($aSearch)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _CreateDemoDict($iSize)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sDictFile = @TempDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@TempDir) & '\~dict.txt'
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sData = ''
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) StringLen (http://www.autoitscript.com/autoit3/docs/functions/StringLen.htm)($sData) < $iSize * 1024 * 1024
$sData &= 'Line ' & Random (http://www.autoitscript.com/autoit3/docs/functions/Random.htm)(100, 999, 1) & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hFile = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)($sDictFile, 2)
FileWrite (http://www.autoitscript.com/autoit3/docs/functions/FileWrite.htm)($hFile, $sData)
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFile)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $sDictFile
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
lyohalyoha
10-02-2021, 18:01
Код:
#include <Array.au3>
$sFileRead = FileRead('dic.txt')
If $sFileRead = '' Then Exit MsgBox(64, @ScriptName, 'Unable to read File dic.txt')
$sMask = InputBox('Mask', 'Enter search maswk:', '')
If @error Then Exit
$aSearch = StringRegExp($sFileRead, '(' & StringReplace($sMask, '?', '.') & ')', 3)
_ArrayDisplay($aSearch) »
Список показывает-ОТЛИЧНО!!!
Какой результат ожидается от ?ЛА »
Результат должен быть-АЛА,ИЛА,ОЛЯ,ЮЛА,ТЛЯ.Ну,то есть то,что в файле есть.
28 мб должен спокойно открывать. »
Такого размера не открывает-пишет:Unable to read File dic.txt
Это парадокс )). Он не может выдавать несуществующие слова, т.к их нет. »
Реально парадокс! Показывает совсем другие слова,которых нету в файле.Искал по маске ?ла . Вот что выдало.Прикрепляю фото Код:
#include <Array.au3>
$sFileRead = FileRead('dic.txt')
If $sFileRead = '' Then Exit MsgBox(64, @ScriptName, 'Unable to read File dic.txt')
$sMask = InputBox('Mask', 'Enter search maswk:', '')
If @error Then Exit
$aSearch = StringRegExp($sFileRead, '(' & StringReplace($sMask, '?', '.') & ')', 3)
_ArrayDisplay($aSearch) »
Список показывает-ОТЛИЧНО!!!
Какой результат ожидается от ?ЛА »
Результат должен быть-АЛА,ИЛА,ОЛЯ,ЮЛА,ТЛЯ.Ну,то есть то,что в файле есть.
28 мб должен спокойно открывать. »
Такого размера не открывает-пишет:Unable to read File dic.txt
Это парадокс )). Он не может выдавать несуществующие слова, т.к их нет. »
Реально парадокс! Показывает совсем другие слова,которых нету в файле.Искал по маске ?ла . Вот что выдало.Прикрепляю фото https://ibb.co/FYKJC32 https://ibb.co/FYKJC32
Прикрепляю фото »
https://ibb.co/FYKJC32
lyohalyoha, Вы лучше сам словарь упакуйте в архив и выложите на обменник/облако.
lyohalyoha
11-02-2021, 08:34
Код:
#include <Array.au3>
$sDictFile = _CreateDemoDict(30) ;dict.txt
$sFileRead = FileRead($sDictFile)
FileDelete($sDictFile)
If $sFileRead = '' Then
Exit MsgBox(64, @ScriptName, 'Unable to read File')
EndIf
$sMask = InputBox('Mask', 'Enter search mask:', 'Line 1?0')
If @error Then Exit
$sMask = StringReplace($sMask, '?', '.')
$sMask = StringReplace($sMask, '*', '.*')
$aSearch = StringRegExp($sFileRead, '\b(' & $sMask & ')\b', 3)
_ArrayDisplay($aSearch)
Func _CreateDemoDict($iSize)
Local $sDictFile = @TempDir & '\~dict.txt'
Local $sData = ''
While StringLen($sData) < $iSize * 1024 * 1024
$sData &= 'Line ' & Random(100, 999, 1) & @CRLF
WEnd
Local $hFile = FileOpen($sDictFile, 2)
FileWrite($hFile, $sData)
FileClose($hFile)
Return $sDictFile
EndFunc »
Этот,третий ваш код что-то не работает. Появляется надпись Line 1?0 и всё-дальше маска не работает.Второй код лучше,но он не открывает большие файлы,даже 7кб не открывает :lazy:
Вы лучше сам словарь упакуйте в архив и выложите на обменник/облако. »
https://cloud.mail.ru/public/h2aA/uKyo2vH9H
Результат должен быть-АЛА,ИЛА,ОЛЯ,ЮЛА,ТЛЯ »
И как интересно из ?ЛА ты ожидаешь ОЛЯ? откуда программа знает что А это Я?
Такого размера не открывает-пишет:Unable to read File dic.txt »
Скорее всего просто опечатка, у тебя файл dic.txt, а скрипт открывает dict.txt.
https://cloud.mail.ru/public/h2aA/uKyo2vH9H »
Работающий пример с этим файлом:
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
$sDictFile = @DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@DesktopDir) & '\dic.txt'
$sFileRead = FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)($sDictFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sFileRead = '' Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit) MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), 'Unable to read File')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$sMask = InputBox (http://www.autoitscript.com/autoit3/docs/functions/InputBox.htm)('Mask', 'Enter search mask:', '?ЛА')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
$sMask = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sMask, '?', '.')
$sMask = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($sMask, '*', '.*')
$aSearch = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sFileRead, '(?m)^(' & $sMask & ')$', 3)
_ArrayDisplay (http://www.autoitscript.com/autoit3/docs/libfunctions/_ArrayDisplay.htm)($aSearch)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.