Kirillhome
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Код: @echo off setlocal enabledelayedexpansion rem Собственно - сама искомая строка set isk_str="Дом, милый дом" if exist ok.tmp del /q ok.tmp set /a fl_osh_simv=0 set all_simv= #$'()*+,-./0$123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё set simv_z=╨Р ╨С ╨Т ╨У ╨Ф ╨Х ╨Ц ╨Ч ╨Ш ╨Щ ╨Ъ ╨Ы ╨Ь ╨Э ╨Ю ╨Я ╨а ╨б ╨в ╨г ╨д ╨е ╨ж ╨з ╨и ╨й ╨к ╨л ╨м ╨н ╨о ╨п ╨░ ╨▒ ╨▓ ╨│ ╨┤ ╨╡ ╨╢ ╨╖ ╨╕ ╨╣ ╨║ ╨╗ ╨╝ ╨╜ ╨╛ ╨┐ ╤А ╤Б ╤В ╤Г ╤Д ╤Е ╤Ж ╤З ╤И ╤Й ╤К ╤Л ╤М ╤Н ╤О ╤П ╨Б ╤С rem А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я Ё ё set /A max_len_str=700 rem Выясняем длину (с допуском, что вся строка не превышает 700 символов) :_vyasn_dl_str set /A max_len_str=%max_len_str%-1 set new_str=!isk_str:~0,%max_len_str%! if !new_str!==!isk_str! goto _vyasn_dl_str set /A max_len_str=%max_len_str%-1 set /A max_len_dop=700 rem Выясняем длину поиска (с допуском, что вся строка не превышает 700 символов) :_vyasn_dl_dop set /A max_len_dop=%max_len_dop%-1 set new_str=!all_simv:~0,%max_len_dop%! if !new_str!==!all_simv! goto _vyasn_dl_dop set /A max_len_neizm=%max_len_dop% rem Выясняем длину "неизменной части" (с допуском, что вся строка не превышает 700 символов) :_vyasn_dl_neizm set /A max_len_neizm=%max_len_neizm%-1 set new_str=!all_simv:~%max_len_neizm%,1! if !new_str!==А goto _vyx_izm_dl goto _vyasn_dl_neizm :_vyx_izm_dl set /A max_len_neizm=%max_len_neizm% rem Убрали кавычки set new_str=!isk_str:~1,%max_len_str%! rem начали поиски соответствий... set /A max_len_str=%max_len_str%-1 set str_pois= for /l %%a in (0,1,%max_len_str%) do ( set tek_simv=!new_str:~%%a,1! set /a fl_osh_simv=1 for /l %%b in (0,1,%max_len_dop%) do ( set simv_sravn=!all_simv:~%%b,1! if !tek_simv!==!simv_sravn! ( set /a fl_osh_simv=0 if %%b LSS %max_len_neizm% ( set str_pois=!str_pois!!tek_simv! ) else ( set /A polog_zam=%%b-%max_len_neizm% set /A polog_zam=5*!polog_zam! call :zam !polog_zam! ) ) ) if !fl_osh_simv!==1 ( echo Символ !tek_simv! не допустим для поиска... Увы exit /b) ) rem Собственно, поиск find /c "%str_pois%" test.tmp | find /c ": 0" > f.tmp for /f %%i in (f.tmp) do if %%i==0 echo ok > ok.tmp del /q f.tmp exit /b :zam nom_simv rem Собственно, замены для русского алфавита... if "!simv_z:~4,1!" NEQ " " ( set str_pois=!str_pois!!simv_z:~%1,5!) else ( if "!simv_z:~3,1!" NEQ " " ( set str_pois=!str_pois!!simv_z:~%1,4!) else ( if "!simv_z:~2,1!" NEQ " " ( set str_pois=!str_pois!!simv_z:~%1,3!) else ( if "!simv_z:~1,1!" NEQ " " ( set str_pois=!str_pois!!simv_z:~%1,2!) else ( set str_pois=!str_pois!!simv_z:~%1,1! ) ) ) ) exit /b | | Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 02:22 18-08-2006 | Исправлено: Kirillhome, 02:58 18-08-2006 |
|