Необходимо проверять все, что вводит пользователь. Если слово должно состоять только из букв, то пользователь просто случайно может нажать какую-то цифру и, не заметив этого, передать программе.

Однажды я писал программу складского учета, и после ее внедрения возникли проблемы с тем, что названия писались в разной раскладке. Например, оператору нужно было ввести в базу слово сальник. Первая буква - "с", а на клавиатуре в английской и русской раскладках эта буква находится на одной и той же клавише. Пользователь начинает вводить "с" в английской раскладке, а потом, увидев свою ошибку, переключается на русскую, при этом не стирая букву "с". Конечно же, это слово будет отличаться от слова "сальник", написанного полностью в русской раскладке. Именно поэтому вы должны проверять допустимость вводимых символов. В данном случае можно написать функцию, которая будет возвращать значение true, если слово содержит символы только русского языка, и fal se - при наличии недопустимых символов. Такая функция может выглядеть следующим образом:

function IsRusString(TestStr:String):Boolean;
var
i: Integer: begin
Result := true:
for i := 1 to Length(TestStr) do begin
if ((TestStr[i]<'A') or (TestStr[i]>V)) then Result := false:
end:
end:

Эта функция возвращает значение true, только если все символы принадлежат русской раскладке (А-я). В кодировке все буквы идут подряд, начиная с большой буквы "А" и заканчивая маленькой "я". Если какая-то буква отличается, то она считается недопустимым символом. Единственный недостаток такой проверки - буква "ё" в кодировке как бы вынесена за пределы и идет не после буквы "е", как в русском алфавите, а имеет свой код. Чтобы исправить эту ошибку, можно написать так:

function IsRusString(TestStr:String). Boolean: var
і: Integer: begin
Result := true:
for і := 1 to Length(TestStr) do begin
if ((TestStr[i]<'A') or (TestStr[-i]>V)) and (TestStr[i]o'E') or (TestStr[i]<>'e') then Result := false;
end:
end:

Если программе нужен числовой параметр, то пользователь все равно будет вводить его в компонент TEdit, а значит, вы увидите его как строку. Для преобразования строки в число используется функция StrToInt. Я ею пользуюсь только для перевода строки, в которой точно находится число. Если эта строка образуется при вводе пользователем, то обязательно нужно проверить, нет ли в ней символов, мешающих переводу в число (например, букв) Проверку можно сделать как в функции IsRusString, но я люблю другой способ Есть функция преобразования строки в число - StrToIntDef, которой передаются такие два параметра:

в строка, которую надо преобразовать;

в число, которое будет возвращено, если во время преобразования произошла ошибка.

Если мне нужно, чтобы программе передавалось число в диапазоне от -100 до +100, то я делаю преобразование следующим образом:

iResult .= StrToIntDef(Строка. -1000000): if (iResult < -100) or (iResult > 100) then begin
Applіcation.MessageBox('Неверный параметр'. 'Ошибка'. MB_DK). exit;
end:

В первой строке происходит преобразование строки в число. В качестве значения по умолчанию я выбрал такое значение, которое выходит за пределы, плюс какой-то запас на случай, если рамки допустимости изменятся. Число -1 ООО ООО точно выходит за пределы диапазона, и остается хороший задел на случай изменения.

После этого происходит проверка, если результат выходит за допустимые рамки, то выводим сообщение об ошибке и выходим из процедуры или функции.

Чаще всего пользователи сразу видят ошибку, если вместо числа указана какая-то буква. Но если в поле ввода в начале или в конце стоит пробел то это обычно упускается из виду. Пробел удалить легко, поэтому такую задачу можно возложить на программу:

Строка := Тгіш(Строка);

iResult := StrToIntDef(Строка, -1000000):

if (iResult < -100) or (iResult > 100) then begin Application.MessageBox('Неверный параметр', 'Ошибка'. МВ_0К); exit:

end:

Перед тем как переводить строку в число, вызываем функцию Trim, которая удаляет все пробелы, расположенные в начале и в конце строки. Если пробелов нет, то результатом будет та же строка. Для программы выполнение данного кода отнимает не много времени, уменьшается вероятность возникновения ошибок и повышается качество кода.

1.6. Качество кода || Оглавление || 1.6.2. Проверка доступности ресурсов


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31