只读取ada文件中的一个输入

时间:2014-11-05 21:56:10

标签: file-io ada procedural-programming

我在从文件中读取输入时遇到一些麻烦。所以我所做的是制作一个概念验证程序,这是我的主程序中的一部分,它可以做更多但是我只是在阅读输入时遇到了麻烦。 这是我的概念验证程序:

WITH Ada.Text_IO; USE Ada.Text_IO;
with ada.Integer_Text_IO; use ada.Integer_Text_IO;
PROCEDURE Open_File IS

subtype idnum is string(1 ..7);
   -- Make short names so that we can show where things come from

   My_File : File_Type;                  -- Name for file in this program
   Os_Name : String        := "My_Data.txt"; -- OS name for the file
   N       : idnum;                        -- Temporary for reading and printing file contents
   EOL : boolean;
   C : character;
BEGIN

   -- Open will raise an ADA.IO_EXCEPTIONS.NAME_ERROR expection
   -- if the file does not exist.

   Open (File => My_File, Mode => In_File, Name => Os_Name);

   LOOP
      EXIT WHEN End_Of_File (My_File);

      Look_Ahead(My_File, C, EOL);
      IF EOL THEN
         Skip_Line;
      ELSE
         IF C = ' ' THEN 
            Get(My_File, C);
         ELSE
            Get (My_File, N);
            Put_Line(N);
         END IF;
      END IF;         
   END LOOP;

   Close (My_File);
END open_file;

我的数据文件如下所示:(包括最后一个ID后没有新行的空格)

1234567

       456784a

   6758abc

当我编译并运行我的程序时,只有第一个id号被打印到屏幕上。我不知道在哪里检查我的代码,因为它应该继续获取id号直到文件结尾。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

当您Get第二个(和第三个)行时,将引发Data_Error异常,因为456784a不是数字,'a'不是数字字符。如果您希望它是十六进制数字,则输入应为16#456784a#(默认情况下)。