Проверка ввода данных в REXX

Как вводить только целые числа в REXX. В моей программе удается избегать некоторых записей, но когда число содержит такие символы, как запятая, процент, шифр и другие, это приводит к остановке программы. Как проверить эти операции и позволить программе работать только с целочисленным вводом.

do forever
  call charout, "Enter number: "
  pull NumInt
  say

  if (NumInt\== '') then 
    do
      if (datatype(value(NumInt), 'W')) then 
        leave
      else 
      do
        say "Error: Enter only whole number."
        say
      end
    end
  else
    do
      say "Error: <Enter> key accidentally triggered."
      say
    end
end

say "Valid input provided: " || NumeroInteiro

say
call charout, "Press <Enter> to finish... "
pull

exit
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Валидация полей ввода для базовой формы React
Валидация полей ввода для базовой формы React
В одном из моих проектов MERN Stack есть форма с именем, фамилией, контактным номером, адресом, электронной почтой, датой рождения, номером NIC, весом...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
0
0
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, вы хотите добиться того, чтобы разрешить некоторые символы, которые не являются числовыми.... как насчет удаления всех символов, которые действительны, но не числовых, перед проверкой типа данных, например (я предполагаю, что пробел действителен) :

translatetable = ",.%$£-"       /* valid characters */
if (NumInt\== '') then
  x = space(translate(NumInt,' ',translatetable),0) 
  if (datatype(value(x), 'W')) then
    etc etc
Ответ принят как подходящий

Судя по структуре вашей программы, я считаю, что вам нужно что-то вроде:

charSpecial: procedure
arg String
Char = "!@#$%^&*()-_=+[]{}|;:',<>/?`~" || '"'
do i = 1 to length(Char)
  if pos(substr(Char, i, 1), String) > 0 then 
    return 1
end
return 0

Посмотрите использование этого в коде:

do forever
  call charout, "Enter number: "
  pull NumInt
  say

  if (NumInt \== '') then 
    do
      if (charSpecial(NumInt)) then 
        do
          say "Error: Special character not allowed."
          say
        end
      else 
        if (datatype(value(NumInt), 'W')) then 
          leave
        else 
          do
            say "Error: Enter only whole number."
            say
          end
    end
  else
    do
      say "Error: <Enter> key accidentally triggered."
      say
    end
end

say "Valid input provided: " || NumInt

say
call charout, "Press <Enter> to finish... "
pull

exit

Идиома Rexx для этого — функция verify(). Подробности см. на сайте ibm.com/docs/en/zos/3.1.0?topic=functions-verify.

Ross Patterson 18.03.2024 19:55

Другие вопросы по теме