End_Error帮助,在Ada中使用无界字符串

时间:2017-04-09 16:08:21

标签: string file ada

有人可以告诉我为什么我得到一个End_Error异常,如果我有一个循环在它到达此点之前选择退出,我不会看到我如何越过文件的末尾。如果有一个简单的解决方案,我很乐意听到它,我已经被困了一段时间,无限的弦不是我真正的强项。

with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Strings.Unbounded;
use Ada.Strings.Unbounded;
with Ada.Strings.Unbounded.Text_IO;
use Ada.Strings.UNbounded.Text_IO;
procedure checker is

   InWord : Unbounded_String;
        dictionary : File_Type;
        count : Integer;

begin
        Ada.Text_IO.Open
                  (File => dictionary, Mode => In_File, Name => "dictionary.txt");
        loop
        exit when End_of_File;
        InWord := Get_Line(File => dictionary);
        Put(InWord);
        New_Line;
        end loop;
end checker;


raised ADA.IO_EXCEPTIONS.END_ERROR : a-textio.adb:690

2 个答案:

答案 0 :(得分:4)

你有

exit when End_of_File;

但是因为你在输入文件上寻找EOF,它应该是

exit when End_Of_File(File => Dictionary);

我不确定为什么你会看到你做的效果 - 当我尝试它时,没有任何事情发生,直到我键入几个RET然后我得到了End_Error例外。

如您所见,它与字符串无关,无关紧要或其他方式!

答案 1 :(得分:2)

the ARM中所述,不带参数的End_Of_File引用当前输入文件。

在您的情况下,它只是指标准输入而不是您的文件。

考虑到Simon的回答和你得到的行为,我认为你使用你的程序重定向标准输入(类似“cat myFile.txt | checker”)。我是对的吗?