输入变量类型验证

时间:2015-03-12 00:30:46

标签: delphi pascal freepascal

2015骨架程序的程序有一些主要的验证问题,特别是输入类型验证。对于此过程,如何确保用户输入SOMETHING和INTEGER。

程序代码:

Procedure GetMove(Var StartSquare, FinishSquare : Integer);
Begin
  Write('Enter coordinates of square containing piece to move (file first): ');
  Readln(StartSquare);
  Write('Enter coordinates of square to move piece to (file first): ');
  Readln(FinishSquare);
End;

我知道这是基本的,虽然我很奇怪我不知道。

1 个答案:

答案 0 :(得分:0)

您想要输入电子表格单元格引用之类的坐标。例如,A1,B17。您需要查找第一个数字并在该点分割字符串。然后验证这两部分。我假设与电子表格一样,alpha部分是列,数字部分是行。

function TryDecodeCoord(const coord: string; out col: string; out row: Integer): Boolean;
var
  FirstDigit: Integer;
begin
  FirstDigit := 1;
  while (FirstDigit <= Length(coord)) and (IsDigit(coord[FirstDigit])) do
    Inc(FirstDigit);

  if (FirstDigit = 1) or (FirstDigit > Length(coord)) then
  begin
    Result := False;
    Exit;
  end;
  col := Copy(coord, 1, FirstDigit - 1);

  if not TryStrToInt(Copy(coord, FirstDigit, MaxInt), row) then
  begin
    Result := False;
    Exit;
  end;

  Result := True;
end;

您需要实施IsDigit。现代版本的Delphi为这类东西提供RTL功能。否则,您可以随时检查字符是>='0'还是<='9'

我希望你想要比这更多的验证。并且可能是将列从文本转换为整数的方法。但这应该让你去。