Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Программа для поиска слов по маске в txt (http://forum.oszone.net/showthread.php?t=347883)

lyohalyoha 06-02-2021 10:55 2949001

Программа для поиска слов по маске в txt
 
Здравствуйте! Имеется файлик dic.txt со словами внутри. Есть ли такие программы,к которым можно подключить этот файл и чтобы она смогла искать слова по маске в этом файле? Или может кто сможет такую программку сделать? Программа простенькая,без наворотов,только поиск слов по маске. Буду очень признателен,если кто подскажет такие программы или сам сделает,если не трудно :-)

Iska 06-02-2021 13:49 2949014

lyohalyoha, непонятно одно — зачем Вы выбрали тогда раздел Программирование, подраздел AutoIt?

Программ великое множество. Что Вы хотите получить в конечном итоге?

lyohalyoha 06-02-2021 14:00 2949017

Цитата:

Цитата Iska
непонятно одно — зачем Вы выбрали тогда раздел Программирование, подраздел AutoIt? »

А какой раздел подходит для моего вопроса? Нашёл подобный вопрос в этом разделе,но он отличается от моего.
Цитата:

Цитата Iska
Программ великое множество. Что Вы хотите получить в конечном итоге? »

Что-то не нашёл ни одну программу :-( Перечислите несколько,если вам не трудно. Нужно,чтобы программа подключала текстовый файл (dict.txt) и искала в нём слова по маске,например по запросу ?ве?д?-результат звезда.

Creat0R 07-02-2021 23:47 2949204

Цитата:

Цитата lyohalyoha
Нужно,чтобы программа подключала текстовый файл (dict.txt) и искала в нём слова по маске,например по запросу ?ве?д?-результат звезда. »

Ну а дальше? нашла она слово по маске, что с ним делать, просто вывести на экран?
Мне кажется вам просто нужен движок проверки орфографии.

Iska 08-02-2021 05:49 2949225

lyohalyoha, любой текстовый редактор, сложнее блокнота и Write'а, имеющий поиск по регулярным выражениям.

И снова тот же вопрос:
Цитата:

Цитата Creat0R
Ну а дальше? нашла она слово по маске, что с ним делать, просто вывести на экран? »


lyohalyoha 08-02-2021 09:42 2949241

Цитата:

Цитата Creat0R
Ну а дальше? нашла она слово по маске, что с ним делать, просто вывести на экран? »

Да,нужно просто выводить найденные слова,которые соответствуют маске. А на счёт "движка проверки орфографии"-там нужен установленный MS Office.Установить его возможности нету.

Цитата:

Цитата Iska
любой текстовый редактор, сложнее блокнота и Write'а, имеющий поиск по регулярным выражениям. »

Спасибо за совет! В Notepad++ смог искать по маске только так "ма.ин.", с точкой вместо вопроса. Может подскажете более лёгкий способ?

Iska 08-02-2021 19:58 2949348

lyohalyoha, это нормальный способ — обычный поиск по регулярным выражениям. Точка означает один любой символ. Знак вопроса же — квантификатор для предыдущего символа, одначающий «ноль или один».

Возможно, проще всего Вам будет использовать поиск посредством PowerShell.

Creat0R 10-02-2021 03:55 2949534

Код:

$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


lyohalyoha 10-02-2021 09:25 2949543

Цитата:

Цитата Creat0R
Код:
$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мб.Подключил меньше словарь и всё заработало! Но! При поиске по маске,например ?ЛА-выдаёт несуществующие слова в словаре-например-ЛЛА,БЛА,ПЛА,ЛА,СЛА,ПЛА и т.д. Как это можно решить? И чтобы показывались слова не по-одному,а сразу список.А то,если слов много,то приходится постоянно ОК нажимать-это очень долго будет ведь. Спасибо за помощь!

Creat0R 10-02-2021 10:51 2949552

Цитата:

Цитата lyohalyoha
Словарь весит 28мб.Подключил меньше словарь и всё заработало! »

28 мб должен спокойно открывать.

Цитата:

Цитата lyohalyoha
выдаёт несуществующие слова в словаре »

Это парадокс )). Он не может выдавать несуществующие слова, т.к их нет.

Цитата:

Цитата lyohalyoha
Как это можно решить? »

Сначала нужно понять что решать. Какой результат ожидается от ?ЛА?

Цитата:

Цитата lyohalyoha
чтобы показывались слова не по-одному,а сразу список »

Код:

#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)


Creat0R 10-02-2021 11:52 2949563

Цитата:

Цитата Creat0R
28 мб должен спокойно открывать. »

Ну да есть немного задержка, но думаю это терпимо...
Вот вариант для поверки (создаётся файл в 30 мб):
Код:

#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


lyohalyoha 10-02-2021 18:01 2949602

Цитата:

Цитата Creat0R
Код:
#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) »

Список показывает-ОТЛИЧНО!!!
Цитата:

Цитата Creat0R
Какой результат ожидается от ?ЛА »

Результат должен быть-АЛА,ИЛА,ОЛЯ,ЮЛА,ТЛЯ.Ну,то есть то,что в файле есть.
Цитата:

Цитата Creat0R
28 мб должен спокойно открывать. »

Такого размера не открывает-пишет:Unable to read File dic.txt
Цитата:

Цитата Creat0R
Это парадокс )). Он не может выдавать несуществующие слова, т.к их нет. »

Реально парадокс! Показывает совсем другие слова,которых нету в файле.Искал по маске ?ла . Вот что выдало.Прикрепляю фото
Цитата:

Цитата Creat0R
Код:
#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) »

Список показывает-ОТЛИЧНО!!!
Цитата:

Цитата Creat0R
Какой результат ожидается от ?ЛА »

Результат должен быть-АЛА,ИЛА,ОЛЯ,ЮЛА,ТЛЯ.Ну,то есть то,что в файле есть.
Цитата:

Цитата Creat0R
28 мб должен спокойно открывать. »

Такого размера не открывает-пишет:Unable to read File dic.txt
Цитата:

Цитата Creat0R
Это парадокс )). Он не может выдавать несуществующие слова, т.к их нет. »

Реально парадокс! Показывает совсем другие слова,которых нету в файле.Искал по маске ?ла . Вот что выдало.Прикрепляю фото

Цитата:

Цитата lyohalyoha
Прикрепляю фото »

https://ibb.co/FYKJC32

Iska 10-02-2021 20:56 2949621

lyohalyoha, Вы лучше сам словарь упакуйте в архив и выложите на обменник/облако.

lyohalyoha 11-02-2021 08:34 2949673

Цитата:

Цитата Creat0R
Код:
#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:
Цитата:

Цитата Iska
Вы лучше сам словарь упакуйте в архив и выложите на обменник/облако. »

https://cloud.mail.ru/public/h2aA/uKyo2vH9H

Creat0R 16-02-2021 01:56 2950244

Цитата:

Цитата lyohalyoha
Результат должен быть-АЛА,ИЛА,ОЛЯ,ЮЛА,ТЛЯ »

И как интересно из ?ЛА ты ожидаешь ОЛЯ? откуда программа знает что А это Я?

Цитата:

Цитата lyohalyoha
Такого размера не открывает-пишет:Unable to read File dic.txt »

Скорее всего просто опечатка, у тебя файл dic.txt, а скрипт открывает dict.txt.

Цитата:

Цитата lyohalyoha
https://cloud.mail.ru/public/h2aA/uKyo2vH9H »

Работающий пример с этим файлом:

Код:

#include <Array.au3>

$sDictFile = @DesktopDir & '\dic.txt'
$sFileRead = FileRead($sDictFile)

If $sFileRead = '' Then
    Exit MsgBox(64, @ScriptName, 'Unable to read File')
EndIf

$sMask = InputBox('Mask', 'Enter search mask:', '?ЛА')
If @error Then Exit

$sMask = StringReplace($sMask, '?', '.')
$sMask = StringReplace($sMask, '*', '.*')

$aSearch = StringRegExp($sFileRead, '(?m)^(' & $sMask & ')$', 3)
_ArrayDisplay($aSearch)



Время: 21:06.

Время: 21:06.
© OSzone.net 2001-