我正在尝试使用Integer'Value将字符串转换为Integer。这对于通过文件的第一个循环工作正常,但之后我得到了一个错误的输入'value(引发Constraint_Error。我希望有人可以告诉我我的方式的错误,以便我可以将字符串转换为整数每个循环。
WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;
PROCEDURE Isbntest IS
FUNCTION Strip(The_String: String; The_Characters: String)
RETURN String IS
Keep: ARRAY (Character) OF Boolean := (OTHERS => True);
Result: String(The_String'RANGE);
Last: Natural := Result'First-1;
BEGIN
FOR I IN The_Characters'Range LOOP
Keep(The_Characters(I)) := False;
END LOOP;
FOR J IN The_String'RANGE LOOP
IF Keep(The_String(J)) THEN
Last := Last+1;
Result(Last) := The_String(J);
END IF;
END LOOP;
RETURN Result(Result'First .. Last);
END Strip;
Input: File_Type := Ada.Text_IO.Standard_Input;
BEGIN
WHILE NOT End_of_File(Input) LOOP
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := line;
ascii_val: Integer :=0;
BEGIN
StrippedLine := Strip(Line, "-");
ascii_val := integer'value(StrippedLine);
Put(ascii_val);
Put_line(StrippedLine);
END;
END LOOP;
Close (Input);
end isbntest;
答案 0 :(得分:5)
问题是你在创建数组后会弄乱数组的长度。别这么做。
而不是
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := line;
BEGIN
StrippedLine := Strip(Line, "-");
在声明时,只需将Stripped_Line直接初始化为正确的大小。
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := Strip(Line, "-");
BEGIN
我假设你的"剥离"功能在这里正常工作..