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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помогите найти цифру в строке bat файла (http://forum.oszone.net/showthread.php?t=231177)

vitalijch 24-03-2012 19:25 1885903

Помогите найти цифру в строке bat файла
 
Здравствуйте.
Есть задание "Вводится строка произвольного текста и цифра. Удвоить заданную цифру".
Подскажите как найти цифру в строке. Ввод, как я понял осуществляется set /p, а вот на цифре я вошел в ступор.
Заранее, спасибо.

Anonymоus 24-03-2012 20:19 1885921

vitalijch, этот код обработает входную строку и выделит из нее все цифры, которые после и выведет. Если вывод не нужен - уберите строку с Set в конце. К найденным цифрам можно обращаться по переменной Result_1, Result_2 и т.д, общее число найденных цифр содержится в переменной i.
Код:

@Echo Off
SetLocal EnableDelayedExpansion


Set IncomingString=sdFKEflksdf4591askj fbasdfk02342ifdsf65 17 ghrFVEF


Set Charset=1234567890
Set i=0
:ParseString
Set /A i+=1&Set Num_%i%=&Set NumDetect=0
If Not "%IncomingString%"=="" Call :Parser
Set Result_!i!=!Num_%i%!
If Not "%IncomingString%"=="" GoTo ParseString
GoTo ShowResult
:Parser
Echo %Charset%|Find "%IncomingString:~,1%">nul&&(
        Set NumDetect=1
        Set Num_%i%=!Num_%i%!%IncomingString:~,1%
)||(
        If %NumDetect%==1 Exit /B
)
Set IncomingString=%IncomingString:~1%
If "%IncomingString%"=="" Exit /B
GoTo Parser
:ShowResult
For /F "tokens=2 delims==" %%N In ('Set Result_') Do (Echo %%N)
pause

А вот полностью готовый скрипт, отвечающий вашим нуждам - прием строки и удвоение числа в ней. Если чисел нету, или больше одного - выдает ошибку.
Показать скрипт
Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set /P IncomingString=  Введите строку:
Set Charset=1234567890
Set i=0
:ParseString
Set /A i+=1&Set Num_%i%=&Set NumDetect=0
If Not "%IncomingString%"=="" Call :Parser
Set Result_!i!=!Num_%i%!
If Not "%IncomingString%"=="" GoTo ParseString
GoTo ShowResult
:Parser
Echo %Charset%|Find "%IncomingString:~,1%">nul&&(
        Set NumDetect=1
        Set Num_%i%=!Num_%i%!%IncomingString:~,1%
)||(
        If %NumDetect%==1 Exit /B
)
Set IncomingString=%IncomingString:~1%
If "%IncomingString%"=="" Exit /B
GoTo Parser
:ShowResult
If "%Result_1%"=="" (
        Echo Вы не ввели ни одного числа
) Else (
        If "%Result_2%"==""1 (
                Echo  В введённой строке больше одной цифры, проверьте правильность ввода
        ) Else  (
                Set /A Result=Result_1*2
                Echo  Удвоенное число: !Result!
        )
)
pause



Время: 19:40.

Время: 19:40.
© OSzone.net 2001-