PDA

Показать полную графическую версию : cпецсимвол в значении переменной for


Demyurg
18-09-2024, 17:04
Добрый день. Возникла необходимость в строке, вводимой пользователем, проверять корректность ввода (требуется десятичное число).
Использую такую конструкцию в качестве первого шага:

set /p i="Ввод: "
for /f "delims=0123456789,." %%j in ("%i%") do set tmp1="%%j"
if defined tmp1 echo incorrect input

В принципе все работает. Скрипт реагирует на некорректные символы, но ровно до тех пор, пока в i не появляется спецсимвол.
То есть, например, 456,12a распознается как неверное число, а вот 456;12 уже нет.

Вопрос: как объяснить циклу, что я хочу, чтобы в вышеуказанном примере "456;12" переменная tmp1 принимала вид ";" ?

NickM
18-09-2024, 18:15
CMD/BAT - [решено] Проверка количества вводимых символов в переменную (http://forum.oszone.net/post-3003260.html)

Demyurg
18-09-2024, 19:29
Ознакомился с приведенной темой. Сделал вывод, что никак. Верно?

NickM
18-09-2024, 19:56
Сделал вывод, что никак. Верно? »
Не верно.

В теме указано решение для:
проверять корректность ввода »

Demyurg
18-09-2024, 20:34
Однако в последнем посте в топике, на который Вы ссылаетесь, как раз написано обратное. Что при попытке "ввести непотребство" код валится. Что я собственно и наблюдаю в своём примере со спецсимволами. Или я что-то не так понял? Разъясните, пожалуйста.

NickM
18-09-2024, 21:03
Что я собственно и наблюдаю в своём примере со спецсимволами. »
На каком спецсимволе у Вас:
код валится »

megaloman
19-09-2024, 12:45
Demyurg,
требуется десятичное число »@Echo Off &Cls
:Begin
Set "i="
Set /p i="Ввод: >"
If Not defined i (Echo Empty input & GoTo :Begin)
Echo "%i%"|>nul Findstr /R /C:"^\"[0-9]*\"$"|| (Echo incorrect input &Set "i=" &GoTo :Begin)
Echo %i%
GoTo :Begin
Pause
Exit /B

Demyurg
21-09-2024, 17:08
megaloman, спасибо. то, что надо. добавил только [0-9.,] и для моей задачи подходит.
Однако вопрос в образовательных, так сказать, целях относительно работы со спецсимволами в for открыт. Возможно ли это в принципе? Насколько я понял из темы, на которую ссылался NickM, нет. Верно?

NickM, Некорректно выразился. Не в том смысле код валится, что закрывается скрипт по исключению, нет. А в том смысле, что продолжается его исполнение с неверными результатами. Вводные данные, которые не должны проходить проверку, ее проходят и попадают в дальнейшую обработку с закономерно неверными итогами.




© OSzone.net 2001-2012